最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript中自動插入分號的規(guī)則詳解

 更新時間:2024年01月19日 08:38:41   作者:全棧李林  
JavaScript?提供了?automatic?semicolon?insertion?(ASI)自動插入分號規(guī)則,在不加分號的情況下,會自動補充分號來分隔不同語句,下面我們就來具體了解一下這一規(guī)則吧

JavaScript 提供了 automatic semicolon insertion (ASI)自動插入分號規(guī)則,在不加分號的情況下,會自動補充分號來分隔不同語句。

導(dǎo)致在繼左大括號換行、tab 和 space 圣戰(zhàn)后,前端又出現(xiàn)了一場戰(zhàn)爭。

并且隨著那個男人加入這場討論之后,關(guān)于是否應(yīng)該加分號的討論更是激烈了。

ASI 自動插入分號規(guī)則

在決定是否添加分號之前,我們先來了解一下編譯器到底在哪些情況下會自動插入分號,哪些情況必須手動添加分號。

會自動添加分號的情況

1.遇到換行符,但是兩句代碼連接是無效代碼

// 代碼
42
'hello'

// `42 'hello'`連接在一起是無效語句,所以會自動在之間插入分號
42;'hello'

// 直接明確的寫法
42;"hello"
// 代碼
let a = 10, b = 5
a
-
b

// a - b 為有效代碼,所以三者之間不會自動加分號
a = 1; b = 2;

// 直接明確的寫法
a - b

2.遇到換行符,但是兩句代碼之間不允許有換行符

// 代碼
foo
++
bar
++
baz

// foo 和 ++ 符合規(guī)則1,但是不符合 no LineTerminator here規(guī)則,所以會添加分號
foo; 
++bar; 
++baz;

在 JS 標(biāo)準(zhǔn)中,有個 no LineTerminator here 的規(guī)則,規(guī)定哪些語法不能加入換行符,如果開發(fā)者加了換行符,則 JS 編譯器會無法識別并加入分號。

  • 帶標(biāo)簽的continue語句,不能continue后插入換行;
  • 帶標(biāo)簽的break語句,不能在break后面插入換行;
  • return后面不能插入換行;
  • 后自增、后自減運算符前不能插入換行;
  • throwException之間不能插入換行;
  • async關(guān)鍵字,后面不能插入換行;
  • 箭頭函數(shù)的箭頭前,不能插入換行;
  • yield之后,不能插入換行。

3.Restricted productions
如果這些標(biāo)簽后,空一行書寫其它語句,則會自動在這些標(biāo)簽后添加分號:

  • ++ or --
  • return
  • break
  • continue
  • ES6 yield 、async 等
  • 反引號`
// return 后空一行再書寫語句,則會自動在 return 后加分號
return
{
  a: 1
}

// 這是正確寫法
return {
  a: 1
}

其它標(biāo)簽類似。

如果手動在這些標(biāo)簽后加上分號,同樣也是錯誤的,比如:

// 空一行再寫 a,會自動在 ++ 后添加分號
++
a

// 就算手動添加,和上面結(jié)果一樣是錯誤的
++;
a;

所以針對 Restricted productions ,無論讓編譯器自動添加分號,還是自己手動加上分號,都是錯誤的,都應(yīng)該去避免去換行,避免寫這種寫法。

必須手動加分號的情況

以下面這些標(biāo)簽開頭的命令,必須在前面加分號,和前面一個語句分隔:

  • + 和 -:語句以 + 或者 - 開頭
  • /: 語句以正則表達(dá)式開頭
  • ( : 語句以自執(zhí)行函數(shù)開頭
  • [: 語句以數(shù)組開頭

舉例說明:

// 錯誤
a = b
+a
// 正確
a = b
;+a


// 錯誤
a = b
/something/.test(a)
// 正確
a = b
;/something/.test(a)

// 錯誤
a = b
(function () {})()
// 正確
a = b
;(function() {})()

// 錯誤
a = b
[1, 2, 3].forEach()
// 正確
a = b
;[1, 2, 3].forEach()

上面的情況,如果第二行代碼不手動添加分號的話,兩行代碼會合并在一起導(dǎo)致結(jié)果錯誤或者報錯。

上面幾種情況中,只有自執(zhí)行函數(shù)和數(shù)組開頭會在極少情況下遇到,記住這兩個前面要手動加上分號即可。

就算是習(xí)慣加分號的朋友,但仍然要注意下面的情況:

// 不需要結(jié)尾添加分號
if () {
} 

// 不需要結(jié)尾添加分號
for () {
} 

// 不需要結(jié)尾添加分號
while () {
} 

// 需要在結(jié)尾添加分號
var a = function () {
}; 

// 需要在結(jié)尾添加分號
var a = {
  prop: value
}; 

// 報錯
[1, 2, 3].forEach();

即便習(xí)慣寫分號的朋友,也很少有人在 if 、for、while 等語句 } 后寫分號,但是如果使用賦值的形式傳遞,則一定要注意在 } 把分號添加上,以避免后面語句出現(xiàn)自執(zhí)行和數(shù)組開頭的語句。

推薦遇到自執(zhí)行和數(shù)組開頭的,直接前面加上分號就完事了。

總結(jié)

是否添加和是否手動加是兩回事,我們可以用 eslint、Prettier 等工具自動生成或者刪除分號,是否手動加可以看個人喜好,最終代碼內(nèi)可以根據(jù)項目要求用工具生成。

但都要注意必須添加分號的幾種情況。

以上就是JavaScript中自動插入分號的規(guī)則詳解 的詳細(xì)內(nèi)容,更多關(guān)于JavaScript自動插入分號的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解JavaScript是如何驗證URL的

    詳解JavaScript是如何驗證URL的

    當(dāng)開發(fā)者需要為不同目的以不同形式處理URL時,我們經(jīng)常會借助于JavaScript。本文就為大家整理了JavaScript驗證URL的方法,希望對大家有所幫助
    2023-02-02
  • js實現(xiàn)做通訊錄的索引滑動顯示效果和滑動顯示錨點效果

    js實現(xiàn)做通訊錄的索引滑動顯示效果和滑動顯示錨點效果

    下面小編就為大家?guī)硪黄猨s實現(xiàn)做通訊錄的索引滑動顯示效果和滑動顯示錨點效果。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • js面向?qū)ο笾?、私有、靜態(tài)屬性和方法詳解

    js面向?qū)ο笾小⑺接?、靜態(tài)屬性和方法詳解

    這篇文章主要詳細(xì)介紹了js面向?qū)ο笾小⑺接?、靜態(tài)屬性和方法,并附上詳細(xì)的示例,非常的細(xì)致全面,這里推薦給大家,有需要的小伙伴可以參考下
    2015-04-04
  • javascript中CheckBox全選終極方案

    javascript中CheckBox全選終極方案

    在javascript頁面中實現(xiàn)CheckBox或者Radio的選中狀態(tài)是一件很容易的事情,下面我們來給大家展示下在asp.net中使用javascript中CheckBox全選終極方案,有需要的小伙伴可以參考下。
    2015-05-05
  • 利用JS判斷用戶是否上網(wǎng)(連接網(wǎng)絡(luò))

    利用JS判斷用戶是否上網(wǎng)(連接網(wǎng)絡(luò))

    本篇文章主要介紹了利用JS判斷用戶是否上網(wǎng)(連接網(wǎng)絡(luò))。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • 解決layui頁面按鈕點擊無反應(yīng),也不報錯的問題

    解決layui頁面按鈕點擊無反應(yīng),也不報錯的問題

    今天小編就為大家分享一篇解決layui頁面按鈕點擊無反應(yīng),也不報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • 一個很Cool的JS菜單效果

    一個很Cool的JS菜單效果

    [藍(lán)色]一個很Cool的JS菜單效果...
    2006-09-09
  • JavaScript操作DOM樣式的各種方法小結(jié)

    JavaScript操作DOM樣式的各種方法小結(jié)

    在現(xiàn)代Web開發(fā)中,動態(tài)操作DOM元素的樣式是創(chuàng)建交互式用戶體驗的核心技能之一,無論是響應(yīng)用戶操作、實現(xiàn)動畫效果,還是根據(jù)應(yīng)用狀態(tài)改變界面外觀,都離不開對DOM樣式的精確控制,本文將全面介紹JavaScript中操作DOM樣式的各種方法,從基礎(chǔ)概念到高級技巧
    2025-06-06
  • 利用JS實現(xiàn)文字的聚合動畫效果

    利用JS實現(xiàn)文字的聚合動畫效果

    這篇文章主要給大家介紹了利用JS如何實現(xiàn)文字的聚合動畫效果,實現(xiàn)的效果非常不錯,類似粒子動畫的效果,有需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • JavaScript中Map與reduce的應(yīng)用小結(jié)

    JavaScript中Map與reduce的應(yīng)用小結(jié)

    Map構(gòu)造函數(shù)創(chuàng)建一個新Map對象,它允許以鍵值對的形式存儲數(shù)據(jù),提供了一種更加靈活的數(shù)據(jù)結(jié)構(gòu),本文給大家介紹JavaScript中Map與reduce的應(yīng)用小結(jié),感興趣的朋友一起看看吧
    2024-06-06

最新評論

海城市| 朝阳县| 桓仁| 澄城县| 太康县| 普洱| 玉山县| 邵东县| 正安县| 宁河县| 鄂伦春自治旗| 桃江县| 比如县| 云浮市| 云南省| 明星| 二手房| 桂林市| 新密市| 南汇区| 富锦市| 华宁县| 犍为县| 灵宝市| 牟定县| 辰溪县| 平陆县| 扶绥县| 敦化市| 淮阳县| 阳原县| 荆州市| 伽师县| 翁牛特旗| 百色市| 沙河市| 平阳县| 德保县| 乌兰察布市| 漳州市| 金寨县|