没有信息过载,只有糟糕的设计。
—爱德华·塔夫特
减少不必要的元素和装饰是减少噪声的图形设计的一般规则。
屏幕上的视觉元素更少,意味着我们的大脑需要更少的工作来解析实际的有用信息。
let foo = 1
与
let /* variable */ foo = 1; // EOL
当然,这是一个夸张的示例,但它说明了一般原理:当且仅当有视觉目的时,才应添加其他视觉元素。那么,分号是否有目的?
在JavaScript中使用分号的历史原因是:
- 保持与C / Java的相似性
- 避免与编写不良的浏览器和工具的兼容性问题
- 帮助人和机器检测代码错误
- 自动分号插入会导致性能下降
兼容性问题今天几乎不是问题。现代棉短绒可以检测到任何代码中的错误一样好没有分号。与C / Java / PHP的相似性仍然是一个考虑因素(请参见Pat 接受的答案),但是仅仅因为其他语言包含多余的语法元素并不意味着我们应该将其保留在JavaScript中,尤其是由于许多其他语言(咖啡,Python, Ruby,Scala和Lua)不需要它们。
我进行了快速测试,以查看V8是否存在性能下降。这是Io.js解析一个41 MB的JavaScript文件(Lodash重复了100次),并带有分号,然后删除了分号:
$ time node lodashx100.js
node lodashx100.js 2.34s user 1.30s system 99% cpu 3.664 total
$ time node lodashx100s.js
node lodashx100s.js 2.34s user 1.15s system 99% cpu 3.521 total
每个人都必须为自己的项目决定自己喜欢的编码样式,但是我不再看到使用分号的任何实际好处,因此,为了减少视觉噪音,我已经停下来了。