【问题标题】:Javascript: Situation with no semi colon needed?Javascript:不需要分号的情况?
【发布时间】:2011-09-18 01:27:38
【问题描述】:

我正在设置一些数据来进行 AJAX 发布,代码如下所示。

var data = {}
data.someId= 3;
data.anotherId = 4;

这很好用。但是为什么我不需要在第一行末尾加分号呢?

【问题讨论】:

  • 这是我所知道的关于 ASI(JavaScript 中的分号)主题的最佳资源:JavaScript Semicolon Insertion: Everything you need to know
  • 每次忘记添加分号时,Douglas Crockford 都会哭。
  • @Scottie 我从不忘记添加它们。我只是添加它们。(以(开头的语句除外——在这种情况下,我在所述语句前加上分号。其他情况的语句以终端混淆 ASI 开头通常表示另一个问题,例如用作语句的表达式。)

标签: javascript automation insertion


【解决方案1】:

他们是optional。这些你都不需要。

https://mislav.net/2010/05/semicolons/

【讨论】:

    【解决方案2】:

    如果您在设置 Linter 以检测它们的地方不使用分号,有时您的 Linter 设置会触发。然而,一些分号在 JavaScript 中是可选的,包括放在换行符之前的分号。得益于自动半冒号插入 (ASI)。

    ASI 只是分号可选时的一组规则,它实际上并没有在您的代码中插入分号。

    一些分号是必需的。必要的分号示例包括 for 循环和 do-while 循环的头部。

    还要小心,因为虽然省略可选分号是有效代码,但编写了一些工具(如缩小器)来解释这些分号,因此使用其中一种工具可能会引发错误。

    【讨论】:

      【解决方案3】:

      分号在 javascript 中是可选的。但它是recommended to add it

      【讨论】:

      • 我不推荐这个。 “安全”的唯一方法是 1) 了解语言 2) 保持一致(分号与否):-) 使用分号“安全”的反例是受限制的产生式,例如 return。跨度>
      • 我自己不推荐任何东西。我只是指出了关于该主题的 SO 民意调查。 :-)
      • 我只是在挑战“大多数”的使用 :) 它建立了一个“答案中的真相”统计数据。
      【解决方案4】:

      因为 JavaScript 有 Automatic Semicolon Insertion

      之前我错误地称它为自动分号注入,这样说得通:P

      该语言需要它们,但它会预处理您的脚本并尝试猜测它们应该去哪里。这并不总是有效,正如您在 pst 的评论中看到的那样。

      您应该自己定义分号。不要让 JavaScript 猜测。

      【讨论】:

      • 这个例子其实不是ASI的案例。原因是即使没有 ASI,问题仍然存在——return 是受限产品。显示 ASI“并不总是有效”的情况是:x = foo\n(funtion () {...})(),它可能不打算将 foo 的评估作为函数调用。
      • @pst 听起来你对this question 有一个很好的答案:)
      • @pst 这是我的错误,但它有点相关:)
      【解决方案5】:

      JavaScript 实际上不需要分号来确定语句的结尾。如果没有分号,它将使用一个新行作为语句的结尾。唯一需要使用分号的情况是,如果您想将两个语句放在同一行,一个接一个。

      说了这么多,最好的做法是总是用分号结束你的陈述 为了避免混淆并避免可能很难找到的错误。

      【讨论】:

      • 当 ASI 规则不涵盖这种情况时,它确实需要分号。例如,当一行以([ 开头时,就会出现这种情况。
      【解决方案6】:

      在 Javascript 中,一行中的单个语句不需要分号。

      【讨论】:

      • 这取决于 ASI 规则。 ASI 可以被欺骗。想象一下:x = foo\n(function() {})(),这会混淆 ASI。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-17
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多