避免意外合并两行
假设您打算使用换行符代替分号,一个经常被忽视的错误是将两行组合成一个表达式的代码。
例如,以下代码:
// DANGEROUS
a = b + c
(d + e).print()
将被解释为:
a = b + c(d + e).print()
解决办法是:
// SAFE
a = b + c
;(d + e).print()
类似的担忧也出现在:
// DANGEROUS
console.log()
['three', 'two', 'one'].forEach(console.log)
所以一般来说,建议遵循的规则是:
当一行开头为一个括号(
or [
或使用算术运算符+
-
*
/
或正则表达式/.../
然后加一个分号;
在它的前面。
(但请注意++
--
and //
没有分号是安全的。)
(你永远不会真正写*
or /
单独的,所以以这种方式开始一行是没有意义的,但有时您可能想用/.../
正则表达式。在这种情况下,如果不使用分号,很可能会导致语法解析错误。这(
[
+
-
情况更危险,因为它们会导致运行时错误。)
Sources:
-
JavaScript 中的分号是可选的 http://mislav.uniqpath.com/2010/05/semicolons/我发现了here https://stackoverflow.com/questions/444080/do-you-recommend-using-semicolons-after-every-statement-in-javascript?lq=1#6651902
- 伊尼米诺的文章JavaScript 分号插入 http://inimino.org/%7Einimino/blog/javascript_semicolons
避免在开始和结束时合并串联文件
出于类似的原因,也建议使用分号在库脚本的开头和结尾将被释放到野外。事实上,无论您在脚本中使用什么样式,都建议这样做。
在此示例中,带有IIFE http://benalman.com/news/2010/11/immediately-invoked-function-expression/:
// my-library.js
;(function(){
...
})();
作为替代方案,Bootstrap 领先+
,不将 IIFE 包装在(...)
,并以;
。其他变化导致!
代替+
or ;
.
正常使用分号的地方
唯一需要分号的其他时间是在传统的 for 循环中:
for (var i = 0; i < 10; i++) { // good luck doing that without semicolons!
当你不这样的时候将多个语句放在一行上:
x = obj[k]; delete obj[k]; return asChar(x)
使用短绒检查器
一些 linter 会检测您的代码何时可能产生意外后果,并鼓励您遵循上述做法。
例如,所谓的标准js https://standardjs.com/linter 将检测上面提出的问题。 (他们还发布了eslint 配置 https://www.npmjs.com/package/eslint-config-standard如果您更喜欢使用 eslint,但我不确定这些规则有多全面。)