成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

寫(xiě)javascript時(shí)要不要省略分號(hào)?

wupengyu / 908人閱讀

摘要:自動(dòng)填補(bǔ)分號(hào)的規(guī)則在說(shuō)要不要寫(xiě)分號(hào)之前,先了解一下自動(dòng)填補(bǔ)分號(hào)的規(guī)則。后來(lái)看到知乎上的作者尤雨溪和前端大神賀師俊的回答后,我對(duì)寫(xiě)分號(hào)的想法完全顛覆了。總是寫(xiě)分號(hào)并不能完全解決缺陷如后換行會(huì)自動(dòng)插入分號(hào)。

在打算寫(xiě)這篇文章之前,我是一個(gè)分號(hào)黨,在寫(xiě)這篇文章之后,可能會(huì)轉(zhuǎn)為無(wú)分號(hào)黨了。之前是寫(xiě)分號(hào)是編輯器語(yǔ)法較檢所養(yǎng)成的強(qiáng)迫癥,現(xiàn)在觀念的轉(zhuǎn)變,是因?yàn)榭戳瞬簧俅笊竦挠懻摵?,覺(jué)得javascript語(yǔ)句后寫(xiě)分號(hào)除了增大工作量外,意義不大。

javascript自動(dòng)填補(bǔ)分號(hào)的規(guī)則

在說(shuō)要不要寫(xiě)分號(hào)之前,先了解一下javascript自動(dòng)填補(bǔ)分號(hào)的規(guī)則。

在《javascript權(quán)威指南》中有一段話“如果一條語(yǔ)句以“(”、“[”、“/”、“+”、或“-”開(kāi)始,那么它極有可能和前一條語(yǔ)句合在一起解釋。”,寫(xiě)javascript的時(shí)候,如果每條語(yǔ)句都獨(dú)自寫(xiě)成一行,是不需要寫(xiě)分號(hào)的,但是下一行如果遇到上面提到的符號(hào),javascript可能會(huì)與下一行合并解釋。其中以“/”、“+”和“-”開(kāi)頭的語(yǔ)句在實(shí)現(xiàn)項(xiàng)目中比較少見(jiàn),以“(”和“[”開(kāi)頭的則非常常見(jiàn)。下面各找了一個(gè)例子來(lái)說(shuō)明。

以“(”開(kāi)頭的情況:
a = b
(function() {
    
})()

javascript會(huì)解釋成:

a = b(function() {
    
})();
以“[”開(kāi)頭的情況
a = function() {

}
[1,2,3].forEach(function(item) {
    
});

javascript會(huì)解釋成:

a = function() {
}[1,2,3].forEach(function(item) {
    
});
以“/”開(kāi)頭的情況
a = "abc"
/[a-z]/.test(a)

期望的結(jié)果為true,但是javascript會(huì)解釋成,接著就報(bào)錯(cuò)了:

a = ‘a(chǎn)bc’/[a-z]/.test(a);
以“+”開(kāi)頭的情況
a = b
+c

javascript會(huì)解釋成

a = b + c;
以“-”開(kāi)頭的情況
a = b
-c

javascript會(huì)解釋成

a = b - c;

如果在return、break、continue、throw等關(guān)鍵字后面換行,javascript會(huì)在換行處填補(bǔ)分號(hào)。如:

return
{
    a: 1
}

會(huì)解釋成:

return;
{
    a: 1
}

如果“++”或“--”運(yùn)算符作為表達(dá)式的后綴時(shí),表達(dá)式應(yīng)該寫(xiě)在同一行,否則也會(huì)解釋有誤

例如:

x
++
y

會(huì)解釋成:

x;
++y;

而不是

x++;
y;
要不要寫(xiě)分號(hào)

對(duì)于究竟要不要寫(xiě)分號(hào)這個(gè)問(wèn)題,我之前也沒(méi)有細(xì)想,看到編輯器有提示就寫(xiě)了,也沒(méi)有想過(guò)寫(xiě)與不寫(xiě)有什么區(qū)別,甚至在寫(xiě)這篇文章時(shí),思路還是要將寫(xiě)分號(hào)當(dāng)作團(tuán)隊(duì)代碼的規(guī)范。后來(lái)看到知乎上vuejs的作者尤雨溪和前端大神賀師俊的回答后,我對(duì)寫(xiě)分號(hào)的想法完全顛覆了。

對(duì)于總是寫(xiě)分號(hào)的缺陷,賀思俊的總結(jié)很到位,他總結(jié)的3點(diǎn)缺陷如下:

人總是有可能忘記寫(xiě)分號(hào)。ASI(分號(hào)自動(dòng)插入機(jī)制)導(dǎo)致無(wú)法區(qū)分是無(wú)意中忘記還是有意不寫(xiě)(代碼折行)。

“總是寫(xiě)分號(hào)”并不能完全解決ASI缺陷(如return后換行會(huì)自動(dòng)插入分號(hào))。

“}”后是否要加分號(hào)需要回溯到對(duì)應(yīng)“{”之前進(jìn)行語(yǔ)義判斷(是否是函數(shù)表達(dá)式),成本遠(yuǎn)高于前置分號(hào)判斷(只要對(duì)行首字符進(jìn)行token判斷:是否是 [ ( + - / 五個(gè)符號(hào)之一)。

而對(duì)于上面提到的五種符號(hào)需要加分號(hào)的情況,完成可以用工具來(lái)幫我們自動(dòng)完成,現(xiàn)在看來(lái)寫(xiě)分號(hào)除了滿足強(qiáng)迫癥外,好像真的沒(méi)有什么必要了

參考資料

《javascript權(quán)威指南》 第30-31頁(yè)

尤雨溪對(duì)于javascript語(yǔ)句后要不要寫(xiě)分號(hào)的回答

賀思俊對(duì)于javascript語(yǔ)句后要不要寫(xiě)分號(hào)的回答

Hacking Semicolons

JavaScript 中的“自動(dòng)分號(hào)插入”機(jī)制(ASI)

近期在看《javascript權(quán)威指南》,邊看邊總結(jié),都會(huì)同步發(fā)送到微信公眾號(hào)上,歡迎關(guān)注,歡迎提意見(jiàn):

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/92356.html

相關(guān)文章

  • JavaScript裝逼指南

    摘要:構(gòu)造函數(shù)很多教程都告訴我們,不要直接用內(nèi)置對(duì)象的構(gòu)造函數(shù)來(lái)創(chuàng)建基本變量,例如的寫(xiě)法就應(yīng)該用的寫(xiě)法來(lái)取代。但是,構(gòu)造函數(shù)注意是大寫(xiě)的有點(diǎn)特別。構(gòu)造函數(shù)接受的參數(shù)中,第一個(gè)是要傳入的參數(shù)名,第二個(gè)是函數(shù)內(nèi)的代碼用字符串來(lái)表示。 如何寫(xiě)JavaScript才能逼格更高呢?怎樣才能組織JavaScript才能讓別人一眼看出你不簡(jiǎn)單呢?是否很期待別人在看完你的代碼之后感嘆一句原來(lái)還可以這樣寫(xiě)呢?...

    oneasp 評(píng)論0 收藏0
  • 從0到1使用VUE-CLI3開(kāi)發(fā)實(shí)戰(zhàn)(六):這是一個(gè)有代碼潔癖的項(xiàng)目

    摘要:從到使用開(kāi)發(fā)實(shí)戰(zhàn)六這是一個(gè)有代碼潔癖的項(xiàng)目一個(gè)小故事一天我路過(guò)一座橋,碰巧看見(jiàn)一個(gè)人想跳河自殺。配置什么是是一個(gè)開(kāi)源的代碼檢查工具,由于年月創(chuàng)建。使用編寫(xiě),這樣既可以有一個(gè)快速的運(yùn)行環(huán)境的同時(shí)也便于安裝。 從0到1使用VUE-CLI3開(kāi)發(fā)實(shí)戰(zhàn)(六):這是一個(gè)有代碼潔癖的項(xiàng)目 一個(gè)小故事 一天我路過(guò)一座橋,碰巧看見(jiàn)一個(gè)人想跳河自殺。我跑過(guò)去對(duì)他大喊道:別跳,別死啊。為什么不讓我跳?他說(shuō)。...

    genefy 評(píng)論0 收藏0
  • 重學(xué)前端學(xué)習(xí)筆記(二十九)--JavaScript分號(hào)

    摘要:一自動(dòng)插入分號(hào)規(guī)則三條規(guī)則要有換行符,且下一個(gè)符號(hào)是不符合語(yǔ)法的,那么就嘗試插入分號(hào)。有換行符,且語(yǔ)法中規(guī)定此處不能有換行符,那么就自動(dòng)插入分號(hào)。源代碼結(jié)束處,不能形成完整的腳本或者模塊結(jié)構(gòu),那么就自動(dòng)插入分號(hào)。 筆記說(shuō)明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開(kāi)的一個(gè)專(zhuān)欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過(guò)程的一些要點(diǎn)筆記以及感悟,完整...

    Sourcelink 評(píng)論0 收藏0
  • 重學(xué)前端學(xué)習(xí)筆記(二十九)--JavaScript分號(hào)?

    摘要:一自動(dòng)插入分號(hào)規(guī)則三條規(guī)則要有換行符,且下一個(gè)符號(hào)是不符合語(yǔ)法的,那么就嘗試插入分號(hào)。有換行符,且語(yǔ)法中規(guī)定此處不能有換行符,那么就自動(dòng)插入分號(hào)。源代碼結(jié)束處,不能形成完整的腳本或者模塊結(jié)構(gòu),那么就自動(dòng)插入分號(hào)。 筆記說(shuō)明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開(kāi)的一個(gè)專(zhuān)欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過(guò)程的一些要點(diǎn)筆記以及感悟,完整...

    whatsns 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<