鸟食轩

 Microsoft .NET[C#] MVP 2003
随笔 - 424, 文章 - 231, 评论 - 5402, 引用 - 344
数据加载中……

JavaScript语句可以不以;结尾的烦恼

    JavaScript做为一个灵活的脚本语言,其成功是我们显而易见的。不过对于JavaScript语句可以不以";"结尾这点,我对其一直都耿耿于怀!这个特性除了带来语句的混乱,且使其依赖于代码排版(换行)外,我没有发现任何的优点。难道是为了可以少敲一个";"?! 如果习惯了C#、C/C++等的强制";",会更加的觉得郁闷。

    同时这个特性对于JavaScript的debug来说,是灾难性的。下面这个语句是正确的吗?

if ( results == 'AdvancedTimeSelect' )
{
    
this
.DoAdvancedTimeSelect();
    // . . .
}
else ( results && results.length > 0
 )
{
    
// . . .

}
// . . .

    这是我在把"if"-"else"语句结构变成"if"-"else if"-"else"结构时,不小心写成的代码(漏加了一个if)。如果是在C#中等强制要求";"作语句结尾的语言中,这样语句就是一个明显的语法错误。

    可是上面这段代码在JavaScript中却是没有任何语法问题的,同时也可以"正常的"运行。只是这个正常带来的副作用太让人郁闷了,当这段代码处于完整的一个功能模块中时,给debug带来无尽的混乱。虽然另外一个重要的原因也是自己的眼神不好,才写成这样,不过我还是要对JavaScript不强制要求语句以";"结尾的规定耿耿于怀!

    上面代码的结果是如果第一个if条件成立,那么两个()和两个{}内的代码都执行。如果不成立,就执行else以后的代码,包括()和{}括起来的。因为JavaScript把( results && results.length > 0 )当成一个语句作为了else的分支,然后{}就是一个独立的语句集合了。

posted on 2005-06-30 22:25 birdshome 阅读(1324) 评论(3)  编辑 收藏 所属分类: Jscript&Dhtml开发Debug中的滑铁卢

评论

#1楼    回复  引用    

是挺郁闷的!
强烈赞同,我也不喜欢它这个可以不加;的规则,根本就是真是鸡肋,都不知道设计者搞什么飞机,限制一下,好多问题一调试就看出来了,多方便的......:(
2005-12-27 00:38 | 黄宗银 [未注册用户]

#2楼    回复  引用    

javascript中分号的加入本身就是一个很大的错误.
http://javascript.crockford.com/javascript.html
2006-07-07 13:45 | ggyy [未注册用户]

#3楼    回复  引用    

的确很难看出来 else后面的有问题,看了几遍啊
2007-03-11 20:57 | xty [未注册用户]

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2005-08-31 10:12 编辑过


相关链接: