我必须遵循哪些规则来编写没有分号的有效Javascript?

问题描述 投票:3回答:1

关于“我应该使用分号吗?”有很多问题。和“分号注射如何工作?”,但我想找一个能够尽可能避免使用分号的编码人员的无FUD建议。

如果有人像izs或Bootstrap开发者那样选择不用分号编写Javascript,在什么条件下他必须添加分号,他还应该做些什么来确保他的代码不会失败?

javascript syntax
1个回答
8
投票

假设您打算使用换行符代替分号,最大的危险是您可以将两行组合成一个表达式。

避免这种情况的建议是:

当一行以括号([开头时

或与算术运算符+ -/

然后在它前面放一个分号;

(请注意,++ --//都是安全的,没有分号,但regexp文字/.../不是。)

遵循该规则将阻止:

  // BAD
  a = b + c
  (d + e).print()

从被解析为:

  a = b + c(d + e).print()

解决方案:

  // SAFE
  a = b + c
  ;(d + e).print()

资料来源:


出于类似的原因,在库脚本的开头和结尾也建议使用分号,这将被释放到野外。实际上,无论您在脚本中使用何种样式,都建议使用此方法。

在这个例子中有一个IIFE

  // my-library.js
  ;(function(){
      ...
  })();
  • 前导分号将确保您的外括号(...)不会尝试在脚本的尾端调用未终止的表达式,该表达式已在您之前连接。
  • 如果脚本在你的IIFE开始之后连接并且忽略了用自己的分号引导,那么尾随分号是很好的做法。

作为替代方案,Bootstrap带有+,不包裹在(...)的IIFE,并以;结束。其他变化导致!而不是+;


唯一需要的分号是传统的for循环:

  for (var i=0; i<10; i++) { // good luck doing that without semicolons!

当你在一行上放置多个语句时(尽管通常不建议这样做,但出于可读性原因):

  x = obj[k]; delete obj[k]; return asChar(x)
© www.soinside.com 2019 - 2024. All rights reserved.