绝大多数编程语言以分号结束一条语句,但在JavaScript中除非你多条语句写在同一行必须用分号隔开,否则分号是可选的。JavaScript在无法正确解析代码的时候会自动填补分号,如:
var a
a
=
3
console.log(a)
JavaScript会将其解析为:var a;a=3;console.log(a)
但是自动填补分号有很多例外情况,可能并不会如你想像般工作,比如下面的情况:
var y=x+f
(a+b).toString()
JavaScript会看做:var y=x+f(a+b).toString();
,这明显不是你想像的:var y=x+f;(a+b).toString();
再看下面一种情况:
return
true
JavaScript会看做:return;true;
,也不是你想像中的:return true;
下面的代码段也是出人意料的:
x
++
y
JavaScript会看做:x;++y;
,而不是:x++;y;
总结如下:
- 如果一条语句以“(”、“[”、“/”、“+”或“-”开始,那么它极有可能和前一条语句合在一起解析。
- 在return、break和continue和随后的表达式之间不能有换行。
- 涉及“++”和“--”运算符的时候,可以作为表达式的前缀,也可以当做表达式的后缀。如果将其用做后缀表达式,它和表达式应当在同一行。否则,行尾将填补分号,同时“++”或“--”将会作为下一行代码的前缀操作符并与之一起解析。
对于99%的人来说,这些知识都是无用的,因为很少会有人不写分号,但是如果我们不幸遇到了此类代码(希望我们永远都不会遇到),这些知识有利于我们读懂它们。