首页 » 编写高质量代码:改善JavaScript程序的188个建议 » 编写高质量代码:改善JavaScript程序的188个建议全文在线阅读

《编写高质量代码:改善JavaScript程序的188个建议》建议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);

}