最近專案看到同事的一個寫法,想說來研究一下,寫法如下:
1 2 3 4 5 6 7 8 9 10
| function travel(){ const result; switch (params) { case one: case two: result = form && to ? `${from}-${to}` : null; break; } return result }
|
咦?
怎麼第一個 case 沒有需要執行的程式碼,但卻可以讀到與 case two 相同的結果?
基礎用法
switch 會根據不同的條件來值不同的程式碼,例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| switch (expression) { case value1: break; case value2: break; case value3: break; default: break; }
|
給個實際範例,要透過 switch 判斷今天是星期幾:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| let day = new Date().getDay(); let dayName;
switch (day) { case 0: dayName = "Sunday"; break; case 1: dayName = "Monday"; break; case 2: dayName = "Tuesday"; break; case 3: dayName = "Wednesday"; break; case 4: dayName = "Thursday"; break; case 5: dayName = "Friday"; break; case 6: dayName = "Saturday"; break; default: dayName = "Unknown"; break; }
console.log("Today is " + dayName);
|
今天會透過傳入的 day
去判斷符合的條件顯示對應的程式碼,只要找到就會因為 break
停下來,若都沒有符合的條件,就會跳至 default
並顯示 Unknow
。
使用 return 獲得符合條件的程式碼
把上方範例用 return 改寫:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| function getValue(day) { switch (day) { case 0: return "Sunday"; case 1: return "Monday"; case 2: return "Tuesday"; case 3: return "Wednesday"; case 4: return "Thursday"; case 5: return "Friday"; case 6: return "Saturday"; default: return "Unknown"; } }
console.log(getValue(1));
|
以上述的例子來說,結果會跟基本寫法相同,但是 return 會有以下幾個問題:
- 邏輯錯誤:若有多個 case 需要執行相同的程式碼,但其中一個 case 要返回不同的值,那這樣可能會造成邏輯錯誤,因為 switch 的特性也是從頭跑到尾,找到符合的條件就會停止,但使用 return 是把結果直接拋出使用,這樣可能會找到符合的條件,但會丟出不同的結果。
- 無法共用程式碼區塊:如下方範例若有相同條件判斷但要得到相同的程式碼區塊時,如果使用 return 就無法共用相同的程式碼,會導致程式碼較為冗長。
舉個透過 switch 判斷平日與假日的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| function getValue(day) { let dayName;
switch (day) { case 0: dayName = "Sunday"; break; case 1: case 2: case 3: case 4: case 5: dayName = "Weekday"; break; case 6: dayName = "Saturday"; break; default: dayName = "Unknown"; break; }
return dayName; }
console.log(getValue(2));
|
因為平日是週一到週五,故條件如果符合 1-5 時,則共用結果為 weekday,這樣也比較易讀且不會造成程式碼冗長。
以上就是關於 switch 基本用法以及 return 使用時機以及需要注意的地方。