1. 程式人生 > >深入理解switch case

深入理解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?
答: 參見另外一篇文章。


  1. https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/switch ↩︎