今天看了一下jquery-pjax(https://github.com/defunkt/jquery-pjax)的代码,发现几乎都没有分号,顿时整个人就震精了(其实还是自己看得东西少,github, bootstrap还有很多项目和公司都不鼓励加分号的)。然后我去issue里面去搜了一下,发现还真有人提(“您这代码不带分号真是苦了俺的JSLint”https://github.com/defunkt/jquery-pjax/pull/32),不过大牛很坦然地贴了两个链接(1, 2),并表示这是JSLint需要打帕奇:P。

两篇文章一篇强调javascript中的分号是optional的,另外一篇则表示不加分号是对javascript这个语言的statement的深入理解。不过我觉得这两个原因都像是javascript最初设计缺陷的体现。。。个人觉得还是随时要加分号会比较好(盲目追随大部分人的意见),如果真心不想写分号就去用coffeescript等方言好了。

随时加分号的原因主要是js判断一个statement终止的规则加上自动加分号的规则太乱(引自文章2):

  • The statement has an unclosed paren, array literal, or object literal or ends in some other way that is not a valid way to end a statement. (For instance, ending with . or ,.)

  • The line is -- or ++ (in which case it will decrement/increment the next token.)

  • It is a for(), while(), do, if(), or else, and there is no {

  • The next line starts with [, (, +, *, /, -, ,, ., or some other binary operator that can only be found between two tokens in a single expression.

两篇文章都谈到如果很好地注意和深入地理解话不会出什么问题,不过像我等码农扣腚时不用在某些本不需要注意的地方花时间不是可以更好地为四个现代化做贡献么。

另外,下面的写法觉得有类似浏览器里写css hack的感觉。有时候分号在开头有种是注释的错觉。。。

m = a + b
;(d + e).print()

不过编程风格这种事,选自己用得舒心、代码写得放心的就行了(公司或者团队有硬性要求就没办法了

zhihu: JavaScript 语句后应该加分号么?
ruanyifeng: Javascript编程风格