【问题标题】:Why use semicolon? [duplicate]为什么要使用分号? [复制]
【发布时间】:2010-03-08 07:53:39
【问题描述】:

除了主观的视觉感知和在同一行有多个语句的情况外,还有什么理由在 JavaScript 中的语句末尾使用分号?

似乎有大量证据表明分号的使用是高度可选的,并且仅在少数特定情况下是必需的。

【问题讨论】:

  • +1 虽然当你说除了主观视觉感知时,我觉得你试图淡化合理编码约定的重要性。因为如果不能通过诉诸主观视觉感知来帮助他人理解您的代码,那么什么是编码约定?
  • flybywire,好点,但我只是不想让这个问题被 SO mods 解决,因为他们已经对我在 python 上打开的那个做了。希望你能理解。
  • 这是一篇很棒的文章,它表明只有 6 种容易记住的情况需要使用分号:inimino.org/~inimino/blog/javascript_semicolons

标签: javascript coding-style


【解决方案1】:

因为当 JavaScript 猜测分号应该放在哪里时,它会对你做一些讨厌的事情。最好是明确的,让解释器确切地知道你的意思,而不是让白痴框代表你猜测。

参考资料:

...和成千上万的演员。

【讨论】:

  • 你猜?它遵循严格的规则,开发人员应该花 5 分钟时间学习,然后如果他们愿意,就删除无用的字符。还有,白痴盒子就是电视……
  • 关于 js 分号的好文章:mislav.uniqpath.com/2010/05/semicolons
  • 多么糟糕的答案。 JavaScript 解释器从不“猜测”在哪里放置分号。开发人员可能会“猜测” ASI 的规则,但这绝不是一个好主意。开发人员应该了解他们使用的语言。
  • 最好知道语句是如何终止的,不要因为“必须”或“有人告诉你应该”而盲目使用分号:inimino.org/~inimino/blog/javascript_semicolons
【解决方案2】:

看起来很少有原因,或者实际上是边缘情况,当人们想要使用分号时。

http://aresemicolonsnecessaryinjavascript.com/

https://github.com/aresemicolonsnecessaryinjavascript/aresemicolonsnecessaryinjavascript.github.com

【讨论】:

【解决方案3】:

如果你问,因为你来自 Python 背景:不同的是:

【讨论】:

  • 正确使用分号的少数基于事实的论据之一。
  • “为什么”?这听起来像是一个宗教原因,而不是精通。 "如果你默认不使用分号,Javascript 会变得很复杂,因为......", "Python 没有这个问题,因为......"
  • 老实说,我不明白您的评论与我的回答有何关系。我没有给出任何个人偏好,只是引用了语言自身文档的相关方面。
【解决方案4】:

因为

  • 调试出现的细微错误是在浪费时间,您可能会花在做一些很酷的事情上
  • 它使以后维护代码的人更清楚您的意图
  • 并非所有代码维护人员都足够了解自动插入的规则,以便在不使用这些规则的情况下维护代码
  • 将它们排除在外依赖于 所有 工具,这些工具在您的工具链中处理 JavaScript 代码以获得完全正确的规则(例如,某些压缩器/打包器/压缩器不正确,including Crockford's jsmin,这将破坏在某些地方依赖 ASI 的代码)

【讨论】:

  • 你能提供一个可能发生的微妙错误的例子吗?我只能想到会立即引发语法错误的问题,例如 for 循环定义。我认为可选分号的存在对可读性的伤害比对它的帮助更大
  • @CharlieMartin:好吧,我们永远不会在同一个页面上。 :-) return <linebreak> {"foo": "bar"}; 示例(“为什么这个函数返回未定义?!啊!”)对于关注这些事情的人来说是众所周知的(大多数人不知道——幸运的是,在它上面放了一个左大括号自己的行在 JavaScript 世界中是不寻常的,所以人们不会经常绊倒)。
  • 谢谢。我没有想到那个。我个人认为换行符比省略的分号更罪恶,但我想换行符不应该能够在 javascript 中指示意图
【解决方案5】:

作为Douglas Crockford suggests -

放一个; (分号)在每个简单语句的末尾。请注意,分配函数字面量或对象字面量的赋值语句仍然是赋值语句,并且必须以分号结尾。

【讨论】:

  • Douglas Crockford 实际上是不正确的,“赋值语句......必须以分号结尾”所以......
  • 克罗克福德在他的声明中并不是“事实”。他给出了一个建议,如果你遵循这个建议,你必须遵循的规则。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 2013-09-18
  • 2012-09-12
  • 1970-01-01
  • 2015-12-02
  • 2019-05-01
相关资源
最近更新 更多