摘要:自動填補分號的規則在說要不要寫分號之前,先了解一下自動填補分號的規則。后來看到知乎上的作者尤雨溪和前端大神賀師俊的回答后,我對寫分號的想法完全顛覆了。總是寫分號并不能完全解決缺陷如后換行會自動插入分號。
在打算寫這篇文章之前,我是一個分號黨,在寫這篇文章之后,可能會轉為無分號黨了。之前是寫分號是編輯器語法較檢所養成的強迫癥,現在觀念的轉變,是因為看了不少大神的討論后,覺得javascript語句后寫分號除了增大工作量外,意義不大。
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;要不要寫分號
對于究竟要不要寫分號這個問題,我之前也沒有細想,看到編輯器有提示就寫了,也沒有想過寫與不寫有什么區別,甚至在寫這篇文章時,思路還是要將寫分號當作團隊代碼的規范。后來看到知乎上vuejs的作者尤雨溪和前端大神賀師俊的回答后,我對寫分號的想法完全顛覆了。
對于總是寫分號的缺陷,賀思俊的總結很到位,他總結的3點缺陷如下:
人總是有可能忘記寫分號。ASI(分號自動插入機制)導致無法區分是無意中忘記還是有意不寫(代碼折行)。
“總是寫分號”并不能完全解決ASI缺陷(如return后換行會自動插入分號)。
“}”后是否要加分號需要回溯到對應“{”之前進行語義判斷(是否是函數表達式),成本遠高于前置分號判斷(只要對行首字符進行token判斷:是否是 [ ( + - / 五個符號之一)。
而對于上面提到的五種符號需要加分號的情況,完成可以用工具來幫我們自動完成,現在看來寫分號除了滿足強迫癥外,好像真的沒有什么必要了
參考資料《javascript權威指南》 第30-31頁
尤雨溪對于javascript語句后要不要寫分號的回答
賀思俊對于javascript語句后要不要寫分號的回答
Hacking Semicolons
JavaScript 中的“自動分號插入”機制(ASI)
近期在看《javascript權威指南》,邊看邊總結,都會同步發送到微信公眾號上,歡迎關注,歡迎提意見:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/92356.html
摘要:構造函數很多教程都告訴我們,不要直接用內置對象的構造函數來創建基本變量,例如的寫法就應該用的寫法來取代。但是,構造函數注意是大寫的有點特別。構造函數接受的參數中,第一個是要傳入的參數名,第二個是函數內的代碼用字符串來表示。 如何寫JavaScript才能逼格更高呢?怎樣才能組織JavaScript才能讓別人一眼看出你不簡單呢?是否很期待別人在看完你的代碼之后感嘆一句原來還可以這樣寫呢?...
摘要:從到使用開發實戰六這是一個有代碼潔癖的項目一個小故事一天我路過一座橋,碰巧看見一個人想跳河自殺。配置什么是是一個開源的代碼檢查工具,由于年月創建。使用編寫,這樣既可以有一個快速的運行環境的同時也便于安裝。 從0到1使用VUE-CLI3開發實戰(六):這是一個有代碼潔癖的項目 一個小故事 一天我路過一座橋,碰巧看見一個人想跳河自殺。我跑過去對他大喊道:別跳,別死啊。為什么不讓我跳?他說。...
摘要:一自動插入分號規則三條規則要有換行符,且下一個符號是不符合語法的,那么就嘗試插入分號。有換行符,且語法中規定此處不能有換行符,那么就自動插入分號。源代碼結束處,不能形成完整的腳本或者模塊結構,那么就自動插入分號。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完整...
摘要:一自動插入分號規則三條規則要有換行符,且下一個符號是不符合語法的,那么就嘗試插入分號。有換行符,且語法中規定此處不能有換行符,那么就自動插入分號。源代碼結束處,不能形成完整的腳本或者模塊結構,那么就自動插入分號。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完整...
閱讀 3083·2023-04-26 00:53
閱讀 3534·2021-11-19 09:58
閱讀 1696·2021-09-29 09:35
閱讀 3286·2021-09-28 09:46
閱讀 3866·2021-09-22 15:38
閱讀 2696·2019-08-30 15:55
閱讀 3013·2019-08-23 14:10
閱讀 3827·2019-08-22 18:17