switch
語句能夠替代多個 if
判斷。javascript
switch
語句爲多分支選擇的狀況提供了一個更具描述性的方式。html
switch
語句有至少一個 case
代碼塊和一個可選的 default
代碼塊。java
就像這樣:react
switch(x) {
case 'value1': // if (x === 'value1')
...
[break]
case 'value2': // if (x === 'value2')
...
[break]
default:
...
[break]
}
複製代碼
x
值與第一個 case
(也就是 value1
)是否嚴格相等,而後比較第二個 case
(value2
)以此類推。switch
語句就執行相應 case
下的代碼塊,直到遇到最靠近的 break
語句(或者直到 switch
語句末尾)。default
代碼塊(若是 default
存在)。switch
的例子(執行 case 4
部分):微信
let a = 2 + 2;
switch (a) {
case 3:
alert( 'Too small' );
break;
case 4:
alert( 'Exactly!' );
break;
case 5:
alert( 'Too large' );
break;
default:
alert( "I don't know such values" );
}
複製代碼
這裏的 switch
從第一個 case
分支開始將 a
的值與 case
後的值進行比較,第一個 case
後的值爲 3
匹配失敗。學習
而後比較 4
。匹配,因此從 case 4
開始執行直到遇到最近的 break
。this
若是沒有 break
,程序將不通過任何檢查就會繼續執行下一個 case
。spa
無 break
的例子:code
let a = 2 + 2;
switch (a) {
case 3:
alert( 'Too small' );
case 4:
alert( 'Exactly!' );
case 5:
alert( 'Too big' );
default:
alert( "I don't know such values" );
}
複製代碼
在上面的例子中咱們會看到連續執行的三個 alert
:cdn
alert( 'Exactly!' );
alert( 'Too big' );
alert( "I don't know such values" );
複製代碼
switch/case
的參數switch
和 case
都容許任意表達式。
好比:
let a = "1";
let b = 0;
switch (+a) {
case b + 1:
alert("this runs, because +a is 1, exactly equals b+1");
break;
default:
alert("this doesn't run");
}
複製代碼
這裏 +a
返回 1
,這個值跟 case
中 b + 1
相比較,而後執行對應的代碼。
共享同一段代碼的幾個 case
分支能夠被分爲一組:
好比,若是咱們想讓 case 3
和 case 5
執行一樣的代碼:
let a = 2 + 2;
switch (a) {
case 4:
alert('Right!');
break;
case 3: // (*) 下面這兩個 case 被分在一組
case 5:
alert('Wrong!');
alert("Why don't you take a math class?");
break;
default:
alert('The result is strange. Really.');
}
複製代碼
如今 3
和 5
都顯示相同的信息。
switch/case
有經過 case 進行「分組」的能力,實際上是 switch 語句沒有 break
時的反作用。由於沒有 break
,case 3
會從 (*)
行執行到 case 5
。
強調一下,這裏的相等是嚴格相等。被比較的值必須是相同的類型才能進行匹配。
好比,咱們來看下面的代碼:
let arg = prompt("Enter a value?")
switch (arg) {
case '0':
case '1':
alert( 'One or zero' );
break;
case '2':
alert( 'Two' );
break;
case 3:
alert( 'Never executes!' );
break;
default:
alert( 'An unknown value' )
}
複製代碼
prompt
對話框輸入 0
、1
,第一個 alert
彈出。2
,第二個 alert
彈出。3
,由於 prompt
的結果是字符串類型的 "3"
,不嚴格相等 ===
於數字類型的 3
,因此 case 3
不會執行!所以 case 3
部分是一段無效代碼。因此會執行 default
分支。先本身作題目再看答案。
重要程度:⭐️⭐️⭐️⭐️⭐️
將下面 "switch" 結構的代碼寫成 if..else
結構:
switch (browser) {
case 'Edge':
alert( "You've got the Edge!" );
break;
case 'Chrome':
case 'Firefox':
case 'Safari':
case 'Opera':
alert( 'Okay we support these browsers too' );
break;
default:
alert( 'We hope that this page looks ok!' );
}
複製代碼
重要程度:⭐️⭐️⭐️⭐
用 switch
重寫如下代碼:
let a = +prompt('a?', '');
if (a == 0) {
alert( 0 );
}
if (a == 1) {
alert( 1 );
}
if (a == 2 || a == 3) {
alert( '2,3' );
}
複製代碼
在微信公衆號「技術漫談」後臺回覆 1-2-13
獲取本題答案。
現代 JavaScript 教程:開源的現代 JavaScript 從入門到進階的優質教程。React 官方文檔推薦,與 MDN 並列的 JavaScript 學習教程。
在線免費閱讀:zh.javascript.info
掃描下方二維碼,關注微信公衆號「技術漫談」,訂閱更多精彩內容。