Standard JS 参考手册
规则 | Rules
帮助阅读 | Helpful reading
有用的阅读
- 关于分号的JavaScript
- JavaScript分号插入 - 您需要知道的一切
一个有用的视频:
- Are Semicolons Necessary in JavaScript? - YouTube
今天使用的所有流行的代码缩小器都使用基于 AST 的缩小,因此它们可以处理没有分号的 JavaScript 而没有任何问题(因为 JavaScript 中不需要分号)。
Excerpt from "An Open Letter to JavaScript Leaders Regarding Semicolons":
[依赖于自动分号插入]是非常安全的,并且是每个浏览器都能理解的完全有效的JS。Closure编译器,yuicompressor,packer和jsmin都可以正确地缩小它。任何地方都没有性能影响。我很抱歉,这个语言社区的领导者没有教育你,而是给了你谎言和恐惧。那是可耻的。我建议学习JS中的语句实际上是如何终止的(在这种情况下它们不会被终止),这样你就可以编写你觉得很漂亮的代码。通常,
\n
结束声明,除非:
- 该语句具有未闭合的 paren,数组文字或对象文字,或以某种其他方式结束,这不是结束语句的有效方式。(例如,以
.
或结尾,
) - 该行是
--
或++
(在这种情况下,它将递减/递增下一个标记。) - 这是一个
for()
,while()
,do
,if()
,或else
,并没有{
- 下一行开头
[
,(
,+
,*
,/
,-
,,
,.
,或只能在两个标记之间在一个表达式中找到一些其他二进制运算符。
第一个很明显。甚至JSLint也可以使用\n
JSON中的字符和带括号的构造,以及var
跨越多行的语句,
。第二个是超级奇怪。我从来没有见过你想要写的一个案例(在这些类型的对话之外)i\n++\nj
,但是,事实上,这被解析为i; ++j
,而不是i++; j
。第三是很好理解,如果一般被鄙视。if (x)\ny()
相当于if (x) { y() }
。构造在到达块或语句之前不会结束。 ;
是一个有效的JavaScript语句,所以if(x);
相当于if(x){}
或者,“如果是x,则不执行任何操作。”这更常用于循环检查也是更新功能的循环。不寻常,但并非闻所未闻。第四种情况通常是引起反响的“哦,不,你需要分号!”的情况。但是,事实证明,如果你不认为它们是前一行的延续,那么用分号为这些行添加前缀很容易。例如,而不是:foo(); [1,2,3] .forEach(bar); 你可以这样做:foo(); [1,2,3] .forEach(bar)优点是,一旦你习惯于从未看到以半成品开头(
或[
没有半成品的行,前缀就更容易被注意到。