深入理解switch case
switch case語句是我們程式設計中常用的一個表示式。它的語法如下1:
switch (expression) { case value1: // 當 expression 的結果與 value1 匹配時,執行此處語句 [break;] case value2: // 當 expression 的結果與 value2 匹配時,執行此處語句 [break;] ... case valueN: // 當 expression 的結果與 valueN 匹配時,執行此處語句 [break;] [default: // 如果 expression 與上面的 value 值都不匹配時,執行此處語句 [break;]] }
我們平時基本也就是按照這個語法規則來寫switch case。仔細想想裡面其實有幾個問題值得好好想想。
問題1: 每個case都需要一個break嗎?
答: 不是。
詳解: 首先搞清楚break的作用是跳出當前這個switch語句,執行switch case之後的程式碼。看下面一個例子:
switch (color) {
case "red":
console.log("red ");
break;
case "yellow":
console.log("yellow");
default:
console.log("unknown color" );
}
如果輸入color為red則輸出結果:
red
如果輸入color為red則輸出結果:
yellow
default color
從例子可以明顯看出沒有break的話則會從條件匹配的 case 語句開始執行,然後不論是否符合條件繼續持續執行下一個 case 語句,直到遇到break或者執行完所有case。
但是這並不是說不能這樣用,你可以使用這種方法來進行關聯操作。
問題2: default必須放在最後嗎?
答: 不是。
詳解: default就是在所有其他case都不滿足條件的情況下執行,不論你放在哪個位置都可以被執行。看下面兩個例子:
例子1:
var color = "blue";
switch (color) {
case "red":
console.log("red ");
break;
case "yellow":
console.log("yellow");
break;
default:
console.log("unknown color");
}
例子2:
var color = "blue";
switch (color) {
case "red":
console.log("red ");
break;
default:
console.log("unknown color");
case "yellow":
console.log("yellow");
break;
}
你認為這兩個例子的輸出是一樣的嗎?
其實不一樣,例子1的輸出為:
unknown color
例子2輸出為:
unknown color
yellow
看到這裡你應該大概懂了,其實default放在最後的最大好處就是可以省略一個break(結合問題1的解答)。而且default的本意就是在其他條件都不滿足的條件下執行,放在最後其實也最便於理解。所以,在平時寫程式碼的時候還是按照慣例乖乖的把default放在最後吧。
問題3: default是必須要有的嗎?
答: 不是。
詳解: 從語法上來說,default語句就不是必須的。在使用列舉值作為switch引數時,而且case已經列出了所有可能出現的值,此時default語句是不需要的。
但是如果有任何無法被考慮到的情況都應該加入default進行異常處理,否則這時候switch語句不會有任何輸出,難以發現出錯的地方在哪。
問題4: 每一個case下面可以執行多條語句嗎?
答: 當然可以。
詳解: 唯一的要求就是所有要執行的語句必須放在這條case分之下的break之前。
問題5: 什麼時候使用switch case?什麼時候使用if else?
答: 參見另外一篇文章。