js代码要不要加分号
最近写了点node的项目,习惯了go语言的后面不带分号,那么js的项目,要不要带分号呢
首先,我们来了解下javascript的自动填充规则
在说要不要写分号之前,先了解一下javascript自动填补分号的规则。
在《javascript权威指南》中有一段话“如果一条语句以“(”、“[”、“/”、“+”、或“-”开始,那么它极有可能和前一条语句合在一起解释。”,写javascript的时候,如果每条语句都独自写成一行,是不需要写分号的,但是下一行如果遇到上面提到的符号,javascript可能会与下一行合并解释。其中以“/”、“+”和“-”开头的语句在实现项目中比较少见,以“(”和“[”开头的则非常常见。下面各找了一个例子来说明。
以“(”开头的情况:
a = b (function() { })()
javascript会解释成:
a = b(function() { })();
以“[”开头的情况
a = function() { } [1,2,3].forEach(function(item) { });
javascript会解释成:
a = function() { }[1,2,3].forEach(function(item) { });
以“/”开头的情况
a = 'abc' /[a-z]/.test(a)
期望的结果为true,但是javascript会解释成,接着就报错了:
a = ‘abc’/[a-z]/.test(a);
以“+”开头的情况
a = b +c
javascript会解释成
a = b + c;
以“-”开头的情况
a = b -c
javascript会解释成
a = b - c;
如果在return、break、continue、throw等关键字后面换行,javascript会在换行处填补分号。如:
return { a: 1 }
会解释成:
return; { a: 1 }
如果“++”或“–”运算符作为表达式的后缀时,表达式应该写在同一行,否则也会解释有误
例如:
x ++ y
会解释成:
x; ++y;
而不是
x++; y;
要不要写分号
哈哈,可以去参考大佬的回答
- 《javascript权威指南》 第30-31页
- 尤雨溪对于javascript语句后要不要写分号的回答
- 贺思俊对于javascript语句后要不要写分号的回答
- Hacking Semicolons
- JavaScript 中的“自动分号插入”机制(ASI)