JavaScript可选分号细节

一般来说,JavaScript和其他语言一样都是使用分号(;),将语句隔开,但在JavaScript中,如果语句各自独立一行,有时也可以省略分号(;)的。

关于JavaScript中可选分号的问题有几个细节要注意:

细节1:

a=1; //第一个分号可以省略的
b=2;

a=1; b=2; //这样的格式第一个分号是不可以省略

 

细节2:

如果当前语句和随后的非空格字符不能当成一整体来解析的话,JavaScript就在当前语句行结束处自动填补分号

比如:

var a  //自动添加分号var a;,因为不添加JavaScript不能正确解析代码var a a
a     //第二个a可以单独当一条语句(a;),但对比解析代码,发现其实JavaScript并没有给a填补分号,而是和第三行内容一起解析(a=3;)。
=
3
console.log(a);

JavaScript将上述代码解析为:

var a; a=3; console.log(a);

但上面的自动填补规则却有2个例外情况:

1.涉及return、break、continue语句中,不能有换行

return
true;

JavaScript会解析为:

return;
true;

而代码的本意是

return true;

2.涉及”++”、”--”运算符,如果要将其用做后缀表达式,运算符和表达式必须同一行

x
++
y

JavaScript会解析为:

x; ++y;

而代码的本意是

x++; y;

 

细节3:

自动填补分号有时还会导致一些意想不到的情形

比如:

var y=x+f

(a+b).toString()

JavaScript将上述代码解析为:

var y=x+f(a+b).toString(); //根据细节2的填补分号规则,这里JavaScript错误的认为第二行的圆括号和第一行的f组成了一个函数调用f(a+b)。

所以,这里必须手动的添加:

var y=x+f;

(a+b).toString();

 

为了避免这个细节上的错误,可以保守地在第二段语句前加上一个分号:

var x =0

;[x,x+1,x+2].forEach(console.log) //哪怕上面的语句被修改了,或者分号被删除了,前面的分号还能保证了正确地语句解析

 

JavaScript可选分号细节,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。