国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

JavaScript到底應不應該加分號?JavaScript自動插入分號規(guī)則詳解

這篇具有很好參考價值的文章主要介紹了JavaScript到底應不應該加分號?JavaScript自動插入分號規(guī)則詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

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

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

并且隨著那個男人加入這場討論之后,關于是否應該加分號的討論更是激烈了。

JavaScript到底應不應該加分號?JavaScript自動插入分號規(guī)則詳解

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 標準中,有個 no LineTerminator here 的規(guī)則,規(guī)定哪些語法不能加入換行符,如果開發(fā)者加了換行符,則 JS 編譯器會無法識別并加入分號。

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

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

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

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

其它標簽類似。

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

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

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

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

必須手動加分號的情況

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

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

舉例說明:

// 錯誤
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()

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

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

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

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

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

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

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

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

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

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

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

總結

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

但都要注意必須添加分號的幾種情況。文章來源地址http://www.zghlxwxcb.cn/news/detail-801440.html

參考文章

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

到了這里,關于JavaScript到底應不應該加分號?JavaScript自動插入分號規(guī)則詳解的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【一文清晰】單元測試到底是什么?應該怎么做?

    【一文清晰】單元測試到底是什么?應該怎么做?

    我是java程序員出身,后來因為工作原因轉到到了測試開發(fā)崗位。測試開發(fā)工作很多年后,現在是一名自由職業(yè)者 1、什么是單元測試 2、該怎么做單元測試 單元測試(unit testing),是指對軟件中的最小可測試單元進行檢查和驗證。至于“單元”的大小或范圍,并沒有一個明確

    2024年02月07日
    瀏覽(15)
  • 哪個版本的FL Studio更適合我?2023年到底應該入手哪一款FL Studio?

    哪個版本的FL Studio更適合我?2023年到底應該入手哪一款FL Studio?

    很多打算入手正版FL Studio的新手朋友都會糾結一個問題:哪個版本的FL Studio更適合我,2023年到底應該入手哪一款FL Studio?本文會介紹每個版本之間的差異點,并帶大家選擇適合自己的FL Sudio版本。 FL Studio Mac-安裝包:https://souurl.cn/eW2mHz FL Studio Win-安裝包:https://souurl.cn/0tjCE2

    2024年02月13日
    瀏覽(17)
  • 數字IC后端設計實現 | PR工具中到底應該如何控制density和congestion?(ICC2&Innovus)

    數字IC后端設計實現 | PR工具中到底應該如何控制density和congestion?(ICC2&Innovus)

    吾愛IC社區(qū)星友提問:請教星主和各位大佬,對于一個模塊如果不加干預工具會讓inst擠成一團,后面eco修時序就沒有空間了。如果全都加instPadding會導致面積不夠overlap,大家一般怎么處理這種問題? 在數字IC后端設計實現中經常會有這方面的困擾。這也是小編在咱們社區(qū)IC后

    2024年01月21日
    瀏覽(54)
  • JavaScript 的 for 循環(huán)應該如何學習?

    JS for 循環(huán)語法 JS for 循環(huán)適合在已知循環(huán)次數時使用,語法格式如下: for 循環(huán)中包含三個可選的表達式 initialization、condition 和 increment,其中: initialization: 為一個表達式或者變量聲明,我們通常將該步驟稱為“初始化計數器變量”,在循環(huán)過程中只會執(zhí)行一次; condition:

    2024年02月07日
    瀏覽(18)
  • [Unity學習]使用ScrollRect實現自動滾動到底部顯示實時消息,并在拖動的時候取消自動滾動,再次手動滑到底部,又繼續(xù)自動滾動

    [Unity學習]使用ScrollRect實現自動滾動到底部顯示實時消息,并在拖動的時候取消自動滾動,再次手動滑到底部,又繼續(xù)自動滾動

    首先需要重寫ScrollRect組件: 下面通過協(xié)程實現在不滾動ScrollRect的時候,自動滾動到底部。 使用時,寫下面類似代碼即可: Unity原生Scroll View更改配置如下: 其中ScrollView游戲物體更改組件如下: content配置如下: 實現效果如下: 大功告成!加上對象池模式控制添加的text實例

    2024年02月16日
    瀏覽(114)
  • 自動化測試到底是啥?

    自動化測試到底是啥?

    什么是自動化測試?顧名思義就是以程序測試程序,自動執(zhí)行指定動作,實現測試目的。以代碼實現測試思維,以腳本替代手工執(zhí)行。從簡單的獨立功能腳本到依托自動化框架運行的腳本集合都屬于自動化測試范疇。本文旨在通過討論以下幾個方面,總結自動化測試價值最大化

    2024年02月12日
    瀏覽(18)
  • 從月薪3000到月薪20000,自動化測試應該這樣學...

    從月薪3000到月薪20000,自動化測試應該這樣學...

    絕大多數測試工程師都是從功能測試做起的,工作忙忙碌碌, 每天在各種業(yè)務需求學習和點點中度過,過了好多年發(fā)現自己還只是一個功能測試工程師。 隨著移動互聯網的發(fā)展,從業(yè)人員能力的整體進步,軟件測試需要具備的能力要求越來越高,打開招聘網站 ,自動化測試

    2024年02月03日
    瀏覽(19)
  • 不應使用Excel進行項目資源規(guī)劃的 7 個原因

    不應使用Excel進行項目資源規(guī)劃的 7 個原因

    項目資源規(guī)劃早期僅限于基本分配和調度。因此,企業(yè)使用自制工具或excel表來執(zhí)行這一簡單功能。然而,隨著技術和業(yè)務流程的發(fā)展,資源規(guī)劃變得復雜,并包括其他組成部分,如預測和容量規(guī)劃,優(yōu)化等。 ? 由于傳統(tǒng)的excel表無法處理這些復雜問題,企業(yè)開始采用專門的

    2023年04月20日
    瀏覽(17)
  • selenium 自動化測試:如何搭建自動化測試環(huán)境,搭建環(huán)境過程應該注意的問題

    selenium 自動化測試:如何搭建自動化測試環(huán)境,搭建環(huán)境過程應該注意的問題

    最近也有很多人私下問我,selenium學習難嗎,基礎入門的學習內容很多是3以前的版本資料,對于有基礎的人來說,3到4的差別雖然有,但是不足以影響自己,但是對于沒有學過的人來說,通過資料再到自己寫的代碼,發(fā)現有些東西沒有,有些方法又不相同,導致腳本不能運行

    2024年02月10日
    瀏覽(24)
  • 自動駕駛到底需要多少個傳感器?

    由于傳感器的成本從15美元到1美元不等,汽車制造商想知道車輛完全自動駕駛需要多少傳感器。 這些傳感器用于收集有關周圍環(huán)境的數據,它們包括圖像、激光雷達、雷達、超聲波和熱傳感器。一種類型的傳感器是不夠的,因為每種傳感器都有其局限性。這是傳感器融合背后

    2024年03月08日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包