JavaScript自動(dòng)加分號(hào)規(guī)則,有3條
利用我自己的JS語法分析工具JSinJS(https://github.com/kissjs/JSinJS ),我求出了所有能夠出現(xiàn)在語句第一個(gè)的JS語法標(biāo)記 (就是Statement的first集合),他們是:
["debugger", "try", "throw", "switch", "Identifier", "with", "return", "break", "continue", "for", "while", "do", "if", "new", "function", "(", "{", "[", "RegularExpressionLiteral", "StringLiteral", "NumericLiteral", "BooleanLiteral", "NullLiteral", "this", "!", "~", "-", "+", "--", "++", "typeof", "void", "delete", ";", "var"]
共計(jì)35個(gè)。
我又求出了所有可以出現(xiàn)在分號(hào)之前的語法標(biāo)記(即去掉分號(hào)以后的last集),他們是
["--", "++", "IdentifierName", "]", ")", "}", "RegularExpressionLiteral", "StringLiteral", "NumericLiteral", "BooleanLiteral", "NullLiteral", "Identifier", "this", "debugger", "return", "break", "continue"]
共計(jì)17個(gè)。
35*17 = 595種組合,為了方便記憶,以下我分組來討論語法歧義 。(本來用Excel弄了張表,不過表太大了不好貼出來)
首先,以下語法標(biāo)記開頭的語句是絕對安全的,不會(huì)跟不加分號(hào)的上一行產(chǎn)生任何歧義:
var if do while for continue break return with switch throw try debugger ;
接下來我們來分組看不加分號(hào)導(dǎo)致的語法歧義:
總結(jié),
下面在通過實(shí)例代碼介紹下JavaScript中的分號(hào)問題
一般在比較懶的前臺(tái)程序員中經(jīng)常會(huì)碰到一些莫名其妙的問題。
今天僅討論一下在JS中經(jīng)常會(huì)碰到一些關(guān)于分號(hào)的問題。JavaScript這門語言是可以省略分號(hào)的,是因?yàn)樗鼤?huì)換行符后如果缺少分號(hào)就會(huì)無法編譯時(shí)它會(huì)默認(rèn)添加上分號(hào),但是在一些特定情況下他是不會(huì)默認(rèn)添加分號(hào)的。現(xiàn)在簡單介紹一下需要注意的幾個(gè)地方。
在這種情況時(shí):
var x = 0 [x+1,x+2,x+3].forEach(function(){ console.log(x) })
這種情況下會(huì)導(dǎo)致程序無法正常運(yùn)行。JavaScript在解析這段代碼是并不會(huì)在var x = 0后換行。
在寫代碼時(shí)如果以一條語句以 ”(” ,"[" ,"+" ,"-" ,"/" 開始時(shí)通常在上一條語句不會(huì)默認(rèn)添加分號(hào)的。所以在這種情況下盡量保持一下這種寫法,在以這些字符開始時(shí)在行首添加一個(gè)分號(hào),這樣可以保證在別人更改上面代碼時(shí)不加分號(hào)也不會(huì)影響以下代碼運(yùn)行。
var x = 0 ;[x+1,x+2,x+3].forEach(function(){ console.log(x) })
還有就是在涉及 return break continue 這種語句時(shí)盡量不要換行
return true; JavaScript會(huì)解析為 return; true; 在涉及 ++ 和 -- 這一系列運(yùn)算時(shí) 在作為表達(dá)式的前綴或后綴時(shí)在換行是會(huì)有一定的問題,如下情況: var x = 0; var y = 0; x ++ y
JavaScript會(huì)解析為
x;++y; 而不是 x++;y;
雖然在JavaScript這門語言中 “;” 是可以省略不寫的,但是還是建議大家每句代碼后都跟上 “;” 養(yǎng)成這種良好的編碼習(xí)慣,畢竟在大多語言中不帶 “;” 的編碼適不適用的。
總結(jié)
以上所述是小編給大家介紹的JavaScript語句后面的分號(hào)問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com