絕大多數(shù)編程語(yǔ)言以分號(hào)結(jié)束一條語(yǔ)句节预,但在JavaScript中除非你多條語(yǔ)句寫在同一行必須用分號(hào)隔開羊赵,否則分號(hào)是可選的漏麦。JavaScript在無法正確解析代碼的時(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ǔ)句以“(”棠隐、“[”、“/”檐嚣、“+”或“-”開始助泽,那么它極有可能和前一條語(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%的人來說亲澡,這些知識(shí)都是無用的,因?yàn)楹苌贂?huì)有人不寫分號(hào)纫版,但是如果我們不幸遇到了此類代碼(希望我們永遠(yuǎn)都不會(huì)遇到)床绪,這些知識(shí)有利于我們讀懂它們。