繁体   English   中英

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

[英]Why so many semicolons in JavaScript?

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

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

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

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

我可能会坚持使用它,因为在编写jQuery链以轻松发现结束时,这是非常好的。

更新:

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

  • 如果你没有插入分号,那么较旧的JS minimalizer会产生破碎的代码
  • 许多其他语言都使用它们,所以它是一种残留的习惯
  • 有时,分号CAN可以改变逻辑
  • 有些人喜欢用它们来使代码更具人性化

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

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

以下是一个示例:您是否建议在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正确打包/缩小。 否则所有的陈述都将汇集成一个大混乱。

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

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

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

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

建议许多新的JavaScript程序员在任何地方使用分号,并且如果他们不故意使用分号插入规则,他们可以安全地忽略整个语言功能的存在。 情况并非如此,因为上述限制性产品,特别是退货声明。 当意识到受限制的生产问题时,程序员可能会对换行过于谨慎,即使在提高清晰度时也要避开它们。 最好熟悉ASI的所有规则,以便能够读取任何代码,无论其编写方式如何,并编写尽可能清晰的代码。

这是关于这个主题和引用来源的一个很好的资源 很棒的阅读。

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

...以及来自更多选择文章的第二个引用,反对始终使用分号。 一个很好的阅读。

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

return
    {'foo':'bar'};

将,因为javascript的自动分号插入,什么都不返回。

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

首先,如果符合以

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

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

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

这种语法也可能与JavaScript的对象文字相混淆,后者确实需要半颜色:

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

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

C语言在语句末尾使用分号,也使用大括号。

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

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

在你的例子中我不认为有必要。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM