非常教程

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结束声明,除非:

  1. 该语句具有未闭合的 paren,数组文字或对象文字,或以某种其他方式结束,这不是结束语句的有效方式。(例如,以.或结尾,
  2. 该行是--++(在这种情况下,它将递减/递增下一个标记。)
  3. 这是一个for()while()doif(),或else,并没有{
  4. 下一行开头[(+*/-,.,或只能在两个标记之间在一个表达式中找到一些其他二进制运算符。

第一个很明显。甚至JSLint也可以使用\nJSON中的字符和带括号的构造,以及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)优点是,一旦你习惯于从未看到以半成品开头([没有半成品的行,前缀就更容易被注意到。

规则 | Rules相关

Standard JS

JavaScript 代码规范,自带 linter & 代码自动修正,可以帮助你(及你的团队)节省大量时间

Standard JS 目录

1.快速开始 | quick start
2.常见问题 | FAQ
3.规则 | Rules
4.系统 | Ecosystem