为什么JavaScript中有这么多分号?

时间:2011-07-13 01:46:18

标签: javascript syntax

在我的JavaScript中,我倾向于成为分号的多产用户:

var x = 1;
var y = 2;
if (x==y){do something};

我最近注意到我正在查看许多JavaScript,这些JavaScript在if语句后面没有分号。然后我发现我甚至不知道JS中分号的首选语法,并且在一些谷歌搜索后(相当令人惊讶地)除了分裂一行语句之外根本不需要分号。 / p>

所以,问题是......人们使用分号的这种习惯来自哪里?它是JavaScript中发挥作用时使用的一些流行语言的残余吗?一般的好习惯?只是我吗?

我可能会坚持使用它,因为在编写jQuery链以轻松发现结尾时,它很不错。

更新:

感谢大家的所有答案!总而言之,看起来我们在JS中看到很多分号的原因,即使不需要,也来自各种变量:

    如果你没有插入分号,那么
  • 较旧的JS minimizer会产生损坏的代码
  • 许多其他语言使用它们,因此它是一种遗留的习惯
  • 有时,分号CAN会改变逻辑
  • 有些人更喜欢使用它们来使代码更具人类可读性

10 个答案:

答案 0 :(得分:13)

许多计算机语言使用分号来表示语句的结尾。 C,C ++和Java就是这方面的热门例子。

至于为什么人们使用它们尽管它们是可选的,它们会提高代码的可读性。在大多数情况下,它只是习惯性地完成,但有时您的代码中需要使用分号来消除可能的歧义。它总是比抱歉更安全(和一致)。

以下是Do you recommend using semicolons after every statement in JavaScript?

的示例
// define a function
var fn = function () {
    //...
} // semicolon missing at this line

// then execute some code inside a closure
(function () {
    //...
})();

这将被解释为:

var fn = function () {
    //...
}(function () {
    //...
})();

此外,分号允许Javascript正确打包/缩小。否则所有的陈述都将汇集成一个大混乱。

答案 1 :(得分:4)

JavaScript需要分号。但它确实有自动半结肠插入。

大多数JavaScript程序员比ASI更聪明,更喜欢用半冒号来表达。

答案 2 :(得分:4)

习惯来自恐惧。害怕“破碎”的js压缩器(我对Plone压缩器有一些问题,例如传统的js没有var语句),担心可能会破坏浏览器实现,列表还在继续。那么,为什么不在任何地方使用;并避免所有这些陷阱呢?

这种方法的问题(只是总是使用分号而没有进一步的解释)是你没有试图理解你为什么一开始就这样做,你只是因为有人说你这样做,而且,恕我直言,这也可能是有害的。你过去使用的破碎压缩机现在已经固定好了,你不断插入分号......破碎的习惯很难。我们只是继续做事,因为“我们总是这样做。”

  

建议许多新的JavaScript程序员只使用分号   无处不在,并期望如果他们不故意使用   分号插入规则,他们可以安全地忽略存在   这整个语言功能。事实并非如此,因为   上述限制性制作,特别是退货声明。   当意识到限制生产问题时,程序员   然后可能会过度警惕线路,并且即使在什么时候也要避开它们   他们会提高清晰度。最好熟悉所有的   ASI的规则,以便能够读取任何代码,无论它如何   编写,并编写尽可能清晰的代码。

这是关于此主题的great resource以及引用的来源。很棒的阅读。

  

哪种风格更好?   在某种程度上有客观的   “更好”的选择,在我看来,   最小分号/逗号优先风格略胜一筹,因为   它基本上更易于扫描,因为它鼓励   程序员更好地理解他们使用的语言。

...和来自更多optionated article的第二个引用,反对始终使用分号。一个很好的阅读。

答案 3 :(得分:3)

是否使用分号在很大程度上是一个选择问题。但是,在javascript中,与许多其他语言不同,不使用它们会导致意外结果。例如,

return
    {'foo':'bar'};

会因为javascript的自动分号插入而无法返回任何内容。

答案 4 :(得分:1)

对于这种编码方式的起源,这可能仍然是一个值得商榷的问题,但它可能来自区分中的1和多个语句的能力 conditional,这在大多数语言中都很常见。而且,人们可能会将语法与JavaScript的对象文字

混淆

首先,如果出现以下情况,您将拥有单一陈述:

if (someNumber == 2)
  doSomething();
else
  doSomethingElse();

然后,你有多语句if(不需要分号):

if (someNumber == 3) {
  doThisFirst();
  doThisSecond();
} else
  doSomethingElse();

这种语法也可能与JavaScript的 object literal 混淆,后者确实需要半色:

var SomeObjectLiteral = {
  property: 2,
  doSomething: function() {
  }
};

基本上,分号在Javascript中很重要,可以确定命令或定义的结束位置。并且大括号对于确定这些命令的块同样重要。但是,你可以拥有任意数量的分号。如果有疑问,请使用分号,但如果有人因为不需要,请做好准备:)

答案 5 :(得分:0)

C语言在语句结尾处使用分号,并且还使用大括号。

答案 6 :(得分:0)

PHP在行尾使用分号,这就是我通常在javascript中使用它们的原因。

答案 7 :(得分:0)

分号标记JS中语句的结尾,但是我不在分支后面加分号,只是在括号内的语句和返回语句的ALWAYS之后。

在你的例子中,我觉得没必要。

答案 8 :(得分:0)

你可以在分号的帮助下在函数内写多个语句;分号用于分隔语句。容易理解。

答案 9 :(得分:0)

除了代码可读性之外,当您真正尝试缩小代码时,会使用分号。缩小后,如果代码中没有分号,javascript引擎可能无法知道哪个语句结束,因为代码中不再有任何新行。