使用switch(true)代替冗長的if-else

今天偶然看到 switch(true) 的寫法,第一感覺是有點奇怪,細細一想,發(fā)覺這個寫法很妙,先上代碼:

var num = 25;
switch (true) {
    case num < 0:
        alert("Less than 0.");
        break;
    case num >= 0 && num <= 10:
        alert("Between 0 and 10.");
        break;}
    case num >= 10 && num <= 20:
        alert("Between 10 and 20.");
        break;
    default:
        alert("More than 20.");
}


一般我們的寫法都是如下所示。我們根據(jù) expression 的值等于哪個值是做相應(yīng)的操作,然后跳出 switch 語句。(此時 expression 的值都是確定的幾個值)。switch 語句中的每一種情形(case)的含義是:“如果表達式(expression)等于這個值(value),則執(zhí)行后面的語句(statement)”。這里的表達式我們會習慣性的認為是一個確定的值,而遇到不確定值或者一個取值范圍時好像不適用了(其實不是的)。

switch (expression) {
    case value: statement
        break;
    case value: statement
        break;
    case value: statement
        break;
    default: statement
}

此種情況下如果使用 if-else 語句,代碼結(jié)構(gòu)如下。代碼結(jié)構(gòu)與可讀性比 switch 差些,如果判斷條件更多時,switch 就更有優(yōu)勢了。從根本上說,switch 語句就是為了讓開發(fā)人員免于編寫像下面這樣的代碼。

if (expression === 'case1') {
    // do sth...
} else if (expression === 'case1') {
    // do sth...
} else if (expression === 'case1') {
    // do sth...
} else {
    // do sth...
}

// 最常見的是有區(qū)間范圍的情況
if (num === 0) {
    // do sth...
} else if (num < 10) {
    // do sth...
} else if (num < 100) {
    // do sth...
} else {
    // do sth...
}

所以初學者(我也是)會這樣認為:

  • 當 expression 是一個確定的值,且 expression 的值存在較多可能時,選擇 switch;
  • 當需要對 expression 的值判斷多個范圍(而不是具體值)時,選用 if-else 語句。

回到我們開頭的那段代碼,這個例子之所以給 switch 語句傳遞表達式 true,是因為每個 case 值都可以返回一個布爾值。這樣,每個 case 按照順序被求值,直到找到匹配的值或者遇到 default 語句為止。

這樣我們不難發(fā)現(xiàn)上面的結(jié)論都是錯的,switch 語句也可使用范圍判定的語句,這樣就可以代替冗長的 if-else 語句了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容