JavaScript語言中那些顯而易見的危險或無用的特性不是最糟糕的,這些特性很容易被避免。最糟糕的特性像「帶刺的玫瑰」,它們是有用的,但也是危險的。
switch語句的由來可以追溯到FORTRAN IV的go to語句。除非明確地中斷流程,否則每次條件判斷後都貫穿到下一個case條件。switch語句的基本語法格式如下:
switch(expression){
statements
}
完全擴展後的switch結構如下:
switch(expression){
case label:
statementList
case label:
statementList
...
default:
statementList
}
當執行switch語句時,JavaScript解釋器首先計算expression表達式的值,然後使用這個值與每個case從句中label標籤值進行比較,如果相同則執行該標籤下的語句。在執行時如果遇到跳轉語句,則會跳出switch結構,否則按順序向下執行,直到switch語句末尾。如果沒有匹配的標籤,則會執行default從句中的語句。如果沒有default從句,則跳出switch結構,執行其後的句子。從ECMAScript v3版本開始允許case從句中可以是任意的表達式,這在C/C++和Java語言中是不允許的。switch語句的示例如下:
switch(a=3){
case 3-2:
alert(1);
break;
case 1+1:
alert(2);
break;
case b=3:
alert(3);
}
在switch語句中,case從句只是指明了想要執行代碼的起點,並沒有指明終點,如果沒有向case從句中添加break語句,則會發生連續貫穿現象,從而忽略後面case從句,這樣就會造成switch結構的邏輯混亂。不過,如果是在函數中使用switch語句,還可以使用return語句來代替break語句,這兩個語句都可以終止switch語句,防止case從句之間發生邏輯貫穿。