讀古今文學網 > 編寫高質量代碼:改善JavaScript程序的188個建議 > 建議16:防止switch貫穿 >

建議16:防止switch貫穿

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從句之間發生邏輯貫穿。