同时这个特性对于JavaScript的debug来说,是灾难性的。下面这个语句是正确的吗?
if(results=='AdvancedTimeSelect')
{
this.DoAdvancedTimeSelect();
//...
}
else(results&&results.length>0)
{
//...
}
//...
这是我在把"if"-"else"语句结构变成"if"-"elseif"-"else"结构时,不小心写成的代码(漏加了一个if)。如果是在C#中等强制要求";"作语句结尾的语言中,这样语句就是一个明显的语法错误。
可是上面这段代码在JavaScript中却是没有任何语法问题的,同时也可以"正常的"运行。只是这个正常带来的副作用太让人郁闷了,当这段代码处于完整的一个功能模块中时,给debug带来无尽的混乱。虽然另外一个重要的原因也是自己的眼神不好,才写成这样,不过我还是要对JavaScript不强制要求语句以";"结尾的规定耿耿于怀!
上面代码的结果是如果第一个if条件成立,那么两个()和两个{}内的代码都执行。如果不成立,就执行else以后的代码,包括()和{}括起来的。因为JavaScript把(results&&results.length>0)当成一个语句作为了else的分支,然后{}就是一个独立的语句集合了。