摘要:JavaScript語言從設計之初就是考慮帶分號的,使用不帶分號的編碼規(guī)則就要小心點啦。
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供岳陽縣網(wǎng)站建設、岳陽縣做網(wǎng)站、岳陽縣網(wǎng)站設計、岳陽縣網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、岳陽縣企業(yè)網(wǎng)站模板建站服務,十余年岳陽縣做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。
最近在項目中開始使用新的編碼規(guī)范,一開始ESLint報一大堆錯誤,改得我想砸鍵盤,花了好些時間才適應,下面列出一些代表性的規(guī)則:
function(args) { .. }
import { fa, fb } from moduleC
早上在實現(xiàn)一個功能的時候,寫了一個map
函數(shù)來復用部分代碼。程序運行起來后,沒有執(zhí)行結(jié)果,而且沒有報錯。通過console.log打印數(shù)據(jù)發(fā)現(xiàn),整個程序執(zhí)行到map前面就再也不往下走了,很奇怪。因為沒有報錯信息,無法推測具體原因。于是,我將其抽象成非常簡單的代碼來排查。如下所示:
console.log("hello, fundebug")
[1, 2, 3].map(i=>console.log(i))
然后執(zhí)行看看結(jié)果如何:
在項目中沒有報錯,單獨將這段代碼拿出來在瀏覽器控制臺下執(zhí)行卻報錯了!
這么簡單的代碼為什么會出錯呢?第一反應就是JS引擎將代碼生成語法樹的時候,可能解析不正確。于是,我在第一行末尾加分號測試。
console.log("hello, fundebug");
[1, 2, 3].map(i=>console.log(i))
程序正確執(zhí)行了:
這讓我更加犯難,如果不加分號會導致程序出錯,那么為什么還會推崇這樣的編碼規(guī)范呢?
在網(wǎng)絡上搜索JavaScript關(guān)于分號的BUG,發(fā)現(xiàn)有非常多關(guān)于要不要使用分號的討論。
引用minhan在扯不完的 JS 分號問題文中的論述:
JSON、JSLint、JSMin和ADSafe 的創(chuàng)造者、ECMA JavaScript 2.0 標準化委員會委員、被JavaScript之父Brendan Eich稱為JavaScript的大宗師、名著《JavaScript: The Good Parts》(中文版《JavaScript語言精粹》)的作者Douglas Crockford直接懟之: 這代碼真尼瑪?shù)寞偪裆礨,我是不會為了這傻X的案例而去降低JSMin的級數(shù); TC39正在考慮將『!』號作為中綴運算符使用,這個代碼不久將來就運行不了。趕緊修復吧,學學怎么正確地使用分號?!?』號并不語句的分隔號,『;』才是。
JSMin處理如下代碼后無法正確執(zhí)行:
clearMenus()
!isActive && $parent.toggleClass('open')
JavaScript有著自動分號插入的機制(Automatic Semicolon Insertion),簡稱ASI。這是一個輔助性的功能,然后有一些情況要注意:
如果你這樣寫代碼:
return
a + b
那么自動分號插入后會這樣:
return;
a + b;
更可能導致隱含BUG的狀況是:
a = b + c
(d + e).print()
他不會自動插入分號,因為第二行一括號開始,會被誤認為是函數(shù)。
a = b + c(d + e).print();
所以,我剛剛的的代碼在自動插入分號后,應該是這樣:
console.log("hello fundebug")[1,2,3].map(i=>console.log(i))
那么這樣看來,用分號才是最安全的做法咯!
如果你不想用分號,又怕出問題,v2ex上有位童鞋給出了一個速記方案:
如果你寫 JS 代碼不喜歡帶分號,而又搞不清什么時候必須加分號,可以這么做:在以 "("、"[" 、"/"、"+"、"-" 開頭的語句前面都加上一個分號。
我最終的解法是先聲明一個變量來指向這個數(shù)組,這樣就可以避免以[
開頭,又不使用分號:
let indexArray = [1, 2, 3]
indexArray.map(i=>console.log(i))
Fundebug專注于JavaScript、微信小程序、微信小游戲、支付寶小程序、React Native、Node.js和Java實時BUG監(jiān)控。 自從2016年雙十一正式上線,F(xiàn)undebug累計處理了7億+錯誤事件,得到了Google、360、金山軟件、百姓網(wǎng)等眾多知名用戶的認可。歡迎免費試用!
轉(zhuǎn)載時請注明作者 Fundebug以及本文地址:
https://blog.fundebug.com/ 2018/09/18/js-semicolon-bug/
文章題目:JS的分號可以省掉嗎?
網(wǎng)址分享:http://jinyejixie.com/article46/jpdghg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供響應式網(wǎng)站、做網(wǎng)站、電子商務、服務器托管、小程序開發(fā)、網(wǎng)站設計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)