有很多关于&#34的问题;我应该使用分号吗?"和#34;分号注入如何工作?",但我想为那些决定尽可能避免使用分号的编码人员找到免费的建议。
如果有人,如izs或Bootstrap开发者,选择编写没有分号的Javascript,在什么条件必须他添加分号,他还应该做些什么来确保他的代码不会失败?
答案 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)