寫javascript時要不要省略分號

在打算寫這篇文章以前,我是一個分號黨,在寫這篇文章以後,轉爲了無分號黨。以前是寫分號是編輯器語法較檢所養成的強迫症,如今觀念的轉變,是由於看了很多大神的討論後,以爲javascript語句後寫分號除了增大工做量外,意義不大。javascript

javascript自動填補分號的規則

在說要不要寫分號以前,先了解一下javascript自動填補分號的規則。前端

在《javascript權威指南》中有一段話「若是一條語句以「(」、「[」、「/」、「+」、或「-」開始,那麼它極有可能和前一條語句合在一塊兒解釋。」,寫javascript的時候,若是每條語句都獨自寫成一行,是不須要寫分號的,可是下一行若是遇到上面提到的符號,javascript可能會與下一行合併解釋。其中以「/」、「+」和「-」開頭的語句在實現項目中比較少見,以「(」和「[」開頭的則很是常見。下面各找了一個例子來講明。vue

以「(」開頭的狀況:

a = b
(function() {

})()

javascript會解釋成:java

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會解釋成,接着就報錯了:ide

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會在換行處填補分號。如:spa

return
{
    a: 1
}

會解釋成:code

return;
{
    a: 1
}

若是「++」或「–」運算符做爲表達式的後綴時,表達式應該寫在同一行,不然也會解釋有誤

例如:

x
++
y

會解釋成:

x;
++y;

而不是

x++;
y;

要不要寫分號

對於究竟要不要寫分號這個問題,我以前也沒有細想,看到編輯器有提示就寫了,也沒有想過寫與不寫有什麼區別,甚至在寫這篇文章時,思路仍是要將寫分號看成團隊代碼的規範。後來看到知乎上vuejs的做者尤雨溪和前端大神賀師俊的回答後,我對寫分號的想法徹底顛覆了。

對於老是寫分號的缺陷,賀思俊的總結很到位,他總結的3點缺陷以下:

  • 人老是有可能忘記寫分號。ASI(分號自動插入機制)致使沒法區分是無心中忘記仍是有意不寫(代碼折行)。
  • 「老是寫分號」並不能徹底解決ASI缺陷(如return後換行會自動插入分號)。
  • 「}」後是否要加分號須要回溯到對應「{」以前進行語義判斷(是不是函數表達式),成本遠高於前置分號判斷(只要對行首字符進行token判斷:是不是 [ ( + - / 五個符號之一)。

而對於上面提到的五種符號須要加分號的狀況,完成能夠用工具來幫咱們自動完成,如今看來寫分號除了知足強迫症外,好像真的沒有什麼必要了

參考資料

 

親,若是您感受本文有用,請點個贊再走吧✌(>‿◠)!!

相關文章
相關標籤/搜索