絕大多數(shù)編程語(yǔ)言以分號(hào)結(jié)束一條語(yǔ)句,但在JavaScript中除非你多條語(yǔ)句寫(xiě)在同一行必須用分號(hào)隔開(kāi),否則分號(hào)是可選的。JavaScript在無(wú)法正確解析代碼的時(shí)候會(huì)自動(dòng)填補(bǔ)分號(hào),如:
var a
a
=
3
console.log(a)
JavaScript會(huì)將其解析為:var a;a=3;console.log(a)
但是自動(dòng)填補(bǔ)分號(hào)有很多例外情況,可能并不會(huì)如你想像般工作,比如下面的情況:
var y=x+f
(a+b).toString()
JavaScript會(huì)看做:var y=x+f(a+b).toString();,這明顯不是你想像的:var y=x+f;(a+b).toString();
再看下面一種情況:
return
true
JavaScript會(huì)看做:return;true;,也不是你想像中的:return true;
下面的代碼段也是出人意料的:
x
++
y
JavaScript會(huì)看做:x;++y;,而不是:x++;y;
總結(jié)如下:
- 如果一條語(yǔ)句以“(”、“[”、“/”、“+”或“-”開(kāi)始,那么它極有可能和前一條語(yǔ)句合在一起解析。
- 在return、break和continue和隨后的表達(dá)式之間不能有換行。
- 涉及“++”和“--”運(yùn)算符的時(shí)候,可以作為表達(dá)式的前綴,也可以當(dāng)做表達(dá)式的后綴。如果將其用做后綴表達(dá)式,它和表達(dá)式應(yīng)當(dāng)在同一行。否則,行尾將填補(bǔ)分號(hào),同時(shí)“++”或“--”將會(huì)作為下一行代碼的前綴操作符并與之一起解析。
對(duì)于99%的人來(lái)說(shuō),這些知識(shí)都是無(wú)用的,因?yàn)楹苌贂?huì)有人不寫(xiě)分號(hào),但是如果我們不幸遇到了此類(lèi)代碼(希望我們永遠(yuǎn)都不會(huì)遇到),這些知識(shí)有利于我們讀懂它們。