起因
最近在阅读Vue相关的代码时发现尤大的代码行末都没有分号,这让我这强迫症着实难受。
我们都知道JS本身是一门不强制分号结尾的语言,不加分号不会影响解释器运行JS代码,但是在大学写C++/Java这样强制分号语言写习惯的我, 自然也把这种习惯带到了JS上。虽然知道可以不写分号,但是我都会主动的在语句末尾加上一个分号,这对我来说可以让思路更清晰,代码更整洁。
为什么大佬不写分号?
参考这一篇尤大在知乎的回答 JavaScript 语句后应该加分号么?
总结一下就是:
- JS语法长得像C-like,不代表他和C就是同一类语言,所有直觉性的 “当然应该加分号” 都是保守的、未经深入思考的草率结论。
- 后来很多设计的新语言都不强制加分号。
- 有一些情况不加分号会出问题,但出现的可能性很低。
- 总之,没有应不应该,只有喜不喜欢。
什么时候不加分号会出问题?
如果一条语句以“(”、“[”、“/”、“+”、或“-”开始,那么它极有可能和前一条语句合在一起解释。
—— <<JavaScript权威指南>>
- 以括号开头(立即执行函数)
javascript
a = b
(function() {
})()
// 实际上被解释成了
a = b(function() {
})();
- 以方括号开头(裸数组调用)
javascript
a = function() {
}
[1,2,3].forEach(function(item) {
});
// 实际上被解释成了
a = function() {
}[1,2,3].forEach(function(item) {
});
- 以左斜杆开头(正则表达式)
javascript
a = 'abc'
/[a-z]/.test(a)
// 实际上被解释成了
a = 'abc'/[a-z]/.test(a);
4.以加号开头(强制转为数字)
javascript
a = b
+c
// 实际上被解释成了
a = b + c;
5.以减号开头(强制转为数字并求负)
javascript
a = b
-c
// 实际上被解释成了
a = b - c;
6.在return后换行
javascript
return
{
a: 1
}
// 自动在return后补上了分号
return;
{
a: 1
}
- 自增运算符
javascript
x
++
y
// 实际上被解释成了
x;
++y;
总结
如果之前就有使用分号的习惯,那么应该保持下去,可以避免一些不必要的错误,如果不喜欢使用分号,那么就要注意避免出现上面的那些情况。