最近寫了點node的項目,習慣了go語言的后面不帶分號,那么js的項目,要不要帶分號呢
首先,我們來了解下javascript的自動填充規則
在說要不要寫分號之前,先了解一下javascript自動填補分號的規則。
在《javascript權威指南》中有一段話“如果一條語句以“(”、“[”、“/”、“+”、或“-”開始,那么它極有可能和前一條語句合在一起解釋。”,寫javascript的時候,如果每條語句都獨自寫成一行,是不需要寫分號的,但是下一行如果遇到上面提到的符號,javascript可能會與下一行合並解釋。其中以“/”、“+”和“-”開頭的語句在實現項目中比較少見,以“(”和“[”開頭的則非常常見。下面各找了一個例子來說明。
以“(”開頭的情況:
a = b (function() { })()
javascript會解釋成:
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會解釋成,接着就報錯了:
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會在換行處填補分號。如:
return { a: 1 }
會解釋成:
return; { a: 1 }
如果“++”或“–”運算符作為表達式的后綴時,表達式應該寫在同一行,否則也會解釋有誤
例如:
x ++ y
會解釋成:
x; ++y;
而不是
x++; y;
要不要寫分號
哈哈,可以去參考大佬的回答
- 《javascript權威指南》 第30-31頁
- 尤雨溪對於javascript語句后要不要寫分號的回答
- 賀思俊對於javascript語句后要不要寫分號的回答
- Hacking Semicolons
- JavaScript 中的“自動分號插入”機制(ASI)