写javascript时要不要省略分号

在打算写这篇文章以前,我是一个分号党,在写这篇文章以后,转为了无分号党。以前是写分号是编辑器语法较检所养成的强迫症,如今观念的转变,是由于看了很多大神的讨论后,以为javascript语句后写分号除了增大工做量外,意义不大。javascript

javascript自动填补分号的规则

在说要不要写分号以前,先了解一下javascript自动填补分号的规则。前端

在《javascript权威指南》中有一段话“若是一条语句以“(”、“[”、“/”、“+”、或“-”开始,那么它极有可能和前一条语句合在一块儿解释。”,写javascript的时候,若是每条语句都独自写成一行,是不须要写分号的,可是下一行若是遇到上面提到的符号,javascript可能会与下一行合并解释。其中以“/”、“+”和“-”开头的语句在实现项目中比较少见,以“(”和“[”开头的则很是常见。下面各找了一个例子来讲明。vue

以“(”开头的状况:

a = b
(function() {

})()

javascript会解释成:java

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会解释成,接着就报错了:ide

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会在换行处填补分号。如:spa

return
{
    a: 1
}

会解释成:code

return;
{
    a: 1
}

若是“++”或“–”运算符做为表达式的后缀时,表达式应该写在同一行,不然也会解释有误

例如:

x
++
y

会解释成:

x;
++y;

而不是

x++;
y;

要不要写分号

对于究竟要不要写分号这个问题,我以前也没有细想,看到编辑器有提示就写了,也没有想过写与不写有什么区别,甚至在写这篇文章时,思路仍是要将写分号看成团队代码的规范。后来看到知乎上vuejs的做者尤雨溪和前端大神贺师俊的回答后,我对写分号的想法彻底颠覆了。

对于老是写分号的缺陷,贺思俊的总结很到位,他总结的3点缺陷以下:

  • 人老是有可能忘记写分号。ASI(分号自动插入机制)致使没法区分是无心中忘记仍是有意不写(代码折行)。
  • “老是写分号”并不能彻底解决ASI缺陷(如return后换行会自动插入分号)。
  • “}”后是否要加分号须要回溯到对应“{”以前进行语义判断(是不是函数表达式),成本远高于前置分号判断(只要对行首字符进行token判断:是不是 [ ( + - / 五个符号之一)。

而对于上面提到的五种符号须要加分号的状况,完成能够用工具来帮咱们自动完成,如今看来写分号除了知足强迫症外,好像真的没有什么必要了

参考资料

 

亲,若是您感受本文有用,请点个赞再走吧✌(>‿◠)!!

相关文章
相关标签/搜索