很多程序员都犯过这样低级的错误:
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);
}