日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

JavaScript到底应不应该加分号?JavaScript自动插入分号规则详解

發(fā)布時(shí)間:2024/1/21 java 63 coder
生活随笔 收集整理的這篇文章主要介紹了 JavaScript到底应不应该加分号?JavaScript自动插入分号规则详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

JavaScript 提供了 automatic semicolon insertion (ASI)自動(dòng)插入分號(hào)規(guī)則,在不加分號(hào)的情況下,會(huì)自動(dòng)補(bǔ)充分號(hào)來分隔不同語句。

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

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

ASI 自動(dòng)插入分號(hào)規(guī)則

在決定是否添加分號(hào)之前,我們先來了解一下編譯器到底在哪些情況下會(huì)自動(dòng)插入分號(hào),哪些情況必須手動(dòng)添加分號(hào)。

會(huì)自動(dòng)添加分號(hào)的情況

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

// 代碼
42
'hello'

// `42 'hello'`連接在一起是無效語句,所以會(huì)自動(dòng)在之間插入分號(hào)
42;'hello'

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

// a - b 為有效代碼,所以三者之間不會(huì)自動(dòng)加分號(hào)
a = 1; b = 2;

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

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

// 代碼
foo
++
bar
++
baz

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

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

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

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

  • ++?or?--
  • return
  • break
  • continue
  • ES6 yieldasync
  • 反引號(hào)`
// return 后空一行再書寫語句,則會(huì)自動(dòng)在 return 后加分號(hào)
return
{
  a: 1
}

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

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

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

// 空一行再寫 a,會(huì)自動(dòng)在 ++ 后添加分號(hào)
++
a

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

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

必須手動(dòng)加分號(hào)的情況

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

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

舉例說明:

// 錯(cuò)誤
a = b
+a
// 正確
a = b
;+a


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

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

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

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

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

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

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

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

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

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

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

// 報(bào)錯(cuò)
[1, 2, 3].forEach();

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

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

總結(jié)

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

但都要注意必須添加分號(hào)的幾種情況。

參考文章

  • Hacking Semicolons
  • What are the rules for JavaScript's automatic semicolon insertion (ASI)? - Stack Overflow

總結(jié)

以上是生活随笔為你收集整理的JavaScript到底应不应该加分号?JavaScript自动插入分号规则详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 五月天视频网 | 激情视频在线观看免费 | 香蕉视频免费在线播放 | 琪琪色综合 | 奇米网久久 | 国产精品刘玥久久一区 | 亚洲砖区区免费 | 中文字幕日韩精品亚洲一区小树林 | 最新福利在线 | 岳睡了我中文字幕日本 | 高清无码视频直接看 | 好看的黄色录像 | 久久久久久欧美精品se一二三四 | 亚洲美女一区二区三区 | 中文在线а√在线8 | 欧美激情久久久久久 | 韩国精品在线观看 | 久久成人国产精品入口 | 中文字幕日韩人妻在线视频 | 国产一区二区激情 | 亚洲aaaaaaa | 欧美va天堂| 欧美成人黄色 | 五月天色丁香 | 一本色道久久综合亚洲二区三区 | 农村末发育av片一区二区 | 日本视频在线播放 | 欧美激情一级 | www.久久久.com | 蜜桃av鲁一鲁一鲁一鲁俄罗斯的 | 六月激情综合网 | 日韩a级片 | 2021狠狠干 | 香蕉视频1024 | 中文字幕人妻一区二区在线视频 | 亚洲美女黄色片 | 人人妻人人玩人人澡人人爽 | 久草国产精品视频 | 中国毛片基地 | 自拍亚洲综合 | 黄色在线观看av | 国产精品久久久久无码av | 亚洲色图偷 | 91九色精品 | 性人久久久久 | 国产精品久久国产 | 中文字幕91在线 | 激情草逼 | 国产噜噜噜噜久久久久久久久 | 久久人人插 | 人妻精品无码一区二区三区 | 免费看的av | www婷婷av久久久影片 | 麻豆69xxnxxporn | av影库| 羞羞羞网站 | 在线免费黄| 欧美 日韩 国产 激情 | 天天操人人爽 | 欧美污视频在线观看 | 尤果网福利视频在线观看 | 久久亚洲私人国产精品va | 久久综合区 | 美女隐私无遮挡网站 | 久久精品www人人爽人人 | 激情青青草 | 国产成人精品一区二区三区视频 | 91色九色 | 18做爰免费视频网站 | www.com黄色片| 操操干| 国产一级免费看 | 一区二区三区精品在线观看 | 一本大道久久a久久综合婷婷 | 亚洲一区二区91 | 国产一区二区精品 | 亚洲欧美日韩精品在线观看 | 色综合视频在线 | 天天色棕合合合合合合合 | 国产suv精品一区二区 | 日本高清黄色 | 国产人妻人伦精品1国产 | 久色视频在线播放 | 四虎在线免费观看 | 男人的天堂久久 | 成年人国产精品 | 精品视频在线观看一区二区 | 青娱乐极品在线 | 吞精囗交69激情欧美 | 亚洲日批 | 欧美群交射精内射颜射潮喷 | 亚洲欧洲在线视频 | 在线不卡欧美 | 国产综合在线视频 | 狠狠躁18三区二区一区传媒剧情 | 日本色综合网 | 亚洲污污视频 | 国产午夜精品一区二区三区四区 | 国产激情无码一区二区 |