我们最后需要分号吗?

kob*_*obe 108 javascript

我在JavaScript的某些地方错过了分号,但它并没有在任何浏览器中抛出错误.是;在最后需要的?

Joh*_*n K 91

该概念称为JavaScript分号插入或" 自动分号插入 ".这篇博客文章:JavaScript分号插入:您需要知道的所有内容都可以 通过标题下的示例以可理解的方式概述这个概念:

  • 允许使用分号的地方
  • 可以省略分号的地方
  • 规则

它甚至深入研究了有关该主题的官方ECMAScript规范.

  • 链接已损坏,但已存档于 https://web.archive.org/web/20190308200819/http://inimino.org/~inimino/blog/javascript_semicolons (6认同)
  • Ops,我错过了 2 个罕见但重要的极端情况,如果没有分号,这些情况将无法按预期解析: `a = b \n (function(...){...})()` 会像 \n 一样解析不存在,并且 `a = b \n [1,2,3].forEach(...)` 也会像单个表达式一样进行解析。因此在这些情况下,分号是必要的。 (4认同)
  • 根据经验,换行符可以用一些直观的例外代替分号:(1)空语句:`while(true);`,(2)for循环语法`for(;;)`和( 3)当替换会破坏代码时,例如:`a = b \n + c`或`$ http(...)\n .success(...)`如果\n被替换为无效代码,所以它根本就不是. (2认同)
  • 这是为什么链接不是答案的一个很好的例子。只需将答案放入答案中即可! (2认同)

ShZ*_*ShZ 29

Javascript做了一个叫做"分号插入"的东西,这意味着你可以在某些地方实际编写省略分号的代码,并且在解析代码时基本上会为你添加它们.

关于何时发生这种情况的规则有点复杂.为简单起见,许多开发人员只是假装不存在分号插入.

  • 有时候我幻想着一个不存在分号插入的世界. (67认同)
  • 作为一名python开发人员,我不明白为什么你会这样做.您可以使用分号,在这种情况下,您的语句可以跨越您希望的行数,或者您不使用分号,在这种情况下,行的结尾意味着语句结束.现在它就像第二个,但你总是想到在你的脑后,实际上应该有一个分号,即使它是完全多余的. (3认同)
  • 最近,node.js 邮件列表上有一个有趣的线程,值得一读:http://groups.google.com/group/nodejs/browse_thread/thread/3166a2bd54e2acf6?pli=1。查看 Isaac Schlueter 的编码风格;这是利用 ASI 的一种有趣的方式——这不一定是坏事:) (2认同)

Pyl*_*nux 11

可以不用分号编写javascript,只需要在启动带有parantesis (或括号的行时插入它们[.

sugarjs times()功能是一个很好的例子:

<script>
    var somthing = 1 + 3
    ;(5).times(function(n){
        console.log(n + " line") //prints "X line" 5 times
    })
</script>
Run Code Online (Sandbox Code Playgroud)

这篇文章揭穿了大多数关于javascript和分号的神话:链接

  • 我个人不同意关闭html标签有两个原因:1.它们是[XHTML](http://codex.wordpress.org/HTML_to_XHTML#All_tags_must_be_closed.2C_even_single_tags)标准所要求的.(分号在[ECMA](http://www.ecma-international.org/ecma-262/5.1/#sec-7.9)标准中是可选的)2.它们为您的代码提供了结构,他们说了一些关于标签结束.(在JavaScript中,分号表示行结束,并且它们会立即被一条说明相同的换行符流过)我并不是说听起来很苛刻,如果你和你的团队写的没有关闭标签那么Godsspeed :-) (10认同)
  • 是的,自动关闭标签并不是开发人员真正的功能,它更像是浏览器修复坏代码的最后一次尝试. (5认同)
  • @DavidFregoli浏览器很多时候会出错 (3认同)
  • 你也不需要使用 html 关闭标签,浏览器会自动关闭它们 (2认同)

Nec*_*net 7

编辑 01-20-2020: (实际上有一些不起眼的情况,不包含分号会导致 JS 代码运行出现问题。实际上发生的情况是 JS 并不总是知道如何智能地为你插入分号。用英语来说我可以与之比较的最接近的是牛津逗号,有些人认为你不需要它,但我们都看过关于缺少标点符号改变句子含义的笑话。除非你想学习所有边缘情况或更糟找出困难的方法,然后建议始终使用它们。)

JavaScript 编程不需要分号,但我建议您使用它。它使您的代码更具可读性,实际上是一种很好的实践,几乎所有很酷的编程语言都使用它。

站起来并使用它,现在就由你决定了!

  • 不需要分号是不正确的。根据规范:“某些 ECMAScript 语句**必须**以分号终止。”http://bclary.com/2004/11/07/#a-7.9 (12认同)
  • 在 Scala 和 Groovy(以及 Python)中,您不需要分号,而且不使用分号更为惯用。您所说的需要分号的“酷”语言是什么? (2认同)
  • “几乎所有很酷的编程语言都使用它。” 这句话是一个形式谬误 (2认同)

小智 6

要说用分号编写代码使其更具可读性是荒谬的.它使您的代码更加破碎.看看这个页面上没有分号的代码,告诉我它的可读性较差.它更具可读性,更简洁,更清洁,更优雅.分号是丑陋的,没有必要.请参阅此文章:http://mislav.uniqpath.com/2010/05/semicolons/

  • 不能不同意.我已经看到代码中有少量的/ else块而没有分号,我不能相信它......就像在新打蜡的地板上的军刀舞,过去常被保留为关于C语言的笑话. (4认同)
  • 我喜欢链接文章的作者所说的,“让人们和你自己塑造你的编码风格,而不是某个人或工具”,然后他的文章结尾是,“通常采用这个建议,你会没事的” 。 (2认同)
  • 我已经使用没有分号的 JavaScript 25 年了,从来没有遇到过问题。这就像人们[害怕在杂货店购物时被飞机撞到](https://en.wikipedia.org/wiki/Cognitive_bias#List_of_biases)。无论如何,你的[本能是正确的](https://info.keylimeinteractive.com/less-is-more-minimalism-in-ux-design)。当争论的一方可以指出切实的好处(不输入分号节省时间),但另一方只能指出一个极其罕见的边缘情况来支持他们的立场时,这表明谁是正确的。 (2认同)
  • Swift 是一个很好的代码示例,它不需要分号,但有足够的语法结构使其易于阅读。 (2认同)