讀古今文學網 > 編寫高質量代碼:改善JavaScript程序的188個建議 > 建議27:小心if隱藏的Bug >

建議27:小心if隱藏的Bug

很多程序員都犯過這樣低級的錯誤:


if(a=1){

alert(a);

}


把比較運算符(==)錯寫為賦值運算符(=)。這樣的Bug一般很難發現,由於它是一個合法的表達式,不會導致編譯錯誤。由於此表達的返回值為非0數值,JavaScript會自動把它轉換為true,因此這樣的分支結構的條件永遠成立。

為了防止出現這樣低級而又令人討厭的錯誤,建議在條件表達式的比較運算中,把常量寫在左側,把變量寫在右側,這樣即使把比較運算符(==)錯寫為賦值運算符(=),也會導致編譯錯誤,因為常量是不能夠被賦值的,從而能夠即時發現這個Bug。例如:


if(1==a){

alert(a);

}


下面這個錯誤也是很容易發生的:


var a=2;

if(1==a);

{

alert(a);

}


當在條件表達式後錯誤地附加一個分號時,整個條件結構的邏輯就發生了根本的變化。用代碼來描述上面結構的邏輯如下:


var a=2;

if(1==a)

;

{

alert(a);

}


也就是說,JavaScript會把條件表達式之後的分號視為一個空語句,從而改變了原來設想的邏輯。因此,要避免這樣的低級錯誤,應該牢記條件表達式之後不允許使用分號,當然也可以通過把大括號與條件表達式書寫在一行內來防止疏忽。


var a=2;

if(1==a){

alert(a);

}