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

时间:2014-08-01 21:06:30

标签: javascript syntax

有很多关于&#34的问题;我应该使用分号吗?"和#34;分号注入如何工作?",但我想为那些决定尽可能避免使用分号的编码人员找到免费的建议。

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

1 个答案:

答案 0 :(得分:8)

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

避免这种情况的建议是:

  

当一行以括号([

开头时      

或使用算术运算符+ -/

     

然后在其前面添加分号;

     

(请注意,++ --//都是安全的,不带分号,但正则表达式字符 /.../不是即可。)

遵循该规则将阻止:

  // 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引导+,不会将{II}包裹在(...)中,并以;结尾。其他变体以!代替+;


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

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

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

  x = obj[k]; delete obj[k]; return asChar(x)