最后需要分号吗?

IT技术 javascript
2021-02-06 12:48:25

我在 JavaScript 的某些地方错过了分号,但它不会在任何浏览器中引发错误。;在最后需要的?

6个回答

这个概念被称为JavaScript 分号插入或“自动分号插入”。这篇博文:JavaScript Semicolon Insertion: Everything you need to know 使用标题下的示例以易于理解的方式很好地概述了这个概念:

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

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

规范链接无效
2021-03-25 12:48:25
作为一个经验法则,换行符可以用几个直观的例外取代分号:(1)空语句:while(true);,(2)内部的for循环的语法for( ;; )和(3)代替将打破代码,例如,当:a = b \n + c$http(...) \n .success(...)将如果 \n 被替换,则代码无效,因此根本不是。
2021-03-28 12:48:25
操作,我错过了 2 个罕见但重要的极端情况,如果没有分号,它们将无法按预期进行a = b \n (function(...){...})()解析会像 \n 不存在a = b \n [1,2,3].forEach(...)一样进行解析,并且会像单个表达式一样进行解析。所以在这些情况下,分号是必要的。
2021-04-04 12:48:25
这是为什么链接不是答案的一个很好的例子。只需将答案放入答案中!
2021-04-05 12:48:25
2021-04-10 12:48:25

Javascript 做了一些称为“分号插入”的事情,这意味着您实际上可以编写在某些地方省略分号的代码,并且在解析代码时基本上会为您添加分号。

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

有时我会幻想一个不存在分号插入的世界。
2021-03-16 12:48:25
Isaac Schlueter 的代码风格文档已经移动:github.com/isaacs/npm/blob/master/doc/misc/npm-coding-style.md
2021-03-23 12:48:25
作为一名 Python 开发人员,我不明白您为什么要这样做。要么使用分号,在这种情况下,您的语句可以跨越您希望的任意多行,或者您不使用,在这种情况下,行尾意味着语句结束。现在它就像第二个,但你总是在脑海里想着实际上应该有一个分号,即使它是完全多余的。
2021-04-10 12:48:25
有一个有趣的线程最近Node.js的邮件列表,这是值得一读:groups.google.com/group/nodejs/browse_thread/thread/...查看 Isaac Schlueter 的编码风格;这是利用 ASI 的一种有趣方式——这不一定是件坏事:)
2021-04-11 12:48:25

可以编写没有分号的 javascript,您只需要在以 parantesis(或括号开头的行中插入它们[

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

<script>
    var somthing = 1 + 3
    ;(5).times(function(n){
        console.log(n + " line") //prints "X line" 5 times
    })
</script>
链接的文章包含以下声明:“只有人才能检测和解决软件错误,而不是工具。” 意见会有所不同,但这对我来说是一大堆盐。
2021-03-15 12:48:25
是的,自动关闭标签并不是开发人员的真正功能,它更像是浏览器修复错误代码的最后一次尝试。
2021-03-18 12:48:25
@DavidFregoli 浏览器很多时候都会出错
2021-03-25 12:48:25
你也不需要使用 html 关闭标签,浏览器会自动关闭它们
2021-04-05 12:48:25
我个人不同意关闭 html 标签的原因有两个: 1. XHTML标准要求它们(分号在ECMA标准中是可选的) 2. 它们为您的代码提供结构,它们说明了标签结束的位置。(在 JavaScript 中,分号表示行结束,它们立即被一个换行符流过,表示相同的内容)我并不是说听起来很刺耳,如果你和你的团队在没有关闭标签的情况下写作,那么 Godsspeed :-)
2021-04-10 12:48:25

说用分号编写代码使其更具可读性是荒谬的。它使您的代码更加混乱。查看此页面上没有分号的代码,并告诉我它的可读性较差。它更易读、更整洁、更干净、更优雅。分号是丑陋的和不必要的。看这篇文章:https : //mislav.net/2010/05/semicolons/

不能同意更多。我见过很少有 then/else 块和没有分号的代码,我不能相信它......就像在刚打蜡的地板上跳舞一样,这曾经被保留为关于 C 语言的笑话。
2021-03-15 12:48:25
我喜欢链接文章的作者所说的“让人们和你自己塑造你的编码风格,而不是某个人或工具”,然后在他的文章结尾处说,“按照规则采纳这个建议,你会没事的” .
2021-04-01 12:48:25

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

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

站出来使用它,现在就看你了!

不需要分号是不正确的。来自规范:Certain ECMAScript statements **must** be terminated with semicolons. bclary.com/2004/11/07/#a-7.9
2021-03-18 12:48:25
“几乎所有很酷的编程语言都使用它。” 这句话是形式谬误
2021-03-23 12:48:25
在 Scala 和 Groovy(和 Python)中,您不需要分号,而且不使用它们更为惯用。你所说的需要分号的“酷”语言是什么??
2021-03-27 12:48:25
是的,你是对的,我澄清感谢自动插入有很多情况你有权避免它但是(一个很大的但是)正如我之前所说的,我不认为这样做是好的做法
2021-03-30 12:48:25
哇,这个说法还引起争议,不足为奇,8 年前我是一个不同的开发者,完全不同意这个说法,但我总是把它作为提醒我学到了多少!!
2021-04-05 12:48:25