<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

        關(guān)于JavaScript語句后面的分號(hào)問題

        來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:24:02
        文檔

        關(guān)于JavaScript語句后面的分號(hào)問題

        關(guān)于JavaScript語句后面的分號(hào)問題:JavaScript自動(dòng)加分號(hào)規(guī)則,有3條 當(dāng)有換行符(包括含有換行符的多行注釋),并且下一個(gè)token沒法跟前面的語法匹配時(shí),會(huì)自動(dòng)補(bǔ)分號(hào)。 當(dāng)有}時(shí),如果缺少分號(hào),會(huì)補(bǔ)分號(hào) 當(dāng)程序源代碼結(jié)束時(shí),如果缺少分號(hào),會(huì)補(bǔ)分號(hào)。 利用我自己的JS語法分析工具JSi
        推薦度:
        導(dǎo)讀關(guān)于JavaScript語句后面的分號(hào)問題:JavaScript自動(dòng)加分號(hào)規(guī)則,有3條 當(dāng)有換行符(包括含有換行符的多行注釋),并且下一個(gè)token沒法跟前面的語法匹配時(shí),會(huì)自動(dòng)補(bǔ)分號(hào)。 當(dāng)有}時(shí),如果缺少分號(hào),會(huì)補(bǔ)分號(hào) 當(dāng)程序源代碼結(jié)束時(shí),如果缺少分號(hào),會(huì)補(bǔ)分號(hào)。 利用我自己的JS語法分析工具JSi

        JavaScript自動(dòng)加分號(hào)規(guī)則,有3條

        1. 當(dāng)有換行符(包括含有換行符的多行注釋),并且下一個(gè)token沒法跟前面的語法匹配時(shí),會(huì)自動(dòng)補(bǔ)分號(hào)。
        2. 當(dāng)有}時(shí),如果缺少分號(hào),會(huì)補(bǔ)分號(hào)
        3. 當(dāng)程序源代碼結(jié)束時(shí),如果缺少分號(hào),會(huì)補(bǔ)分號(hào)。 

        利用我自己的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)致的語法歧義:

        1. 第一種是++和--兩種運(yùn)算符出現(xiàn)在上一行結(jié)尾的情況,下一行以以下開頭時(shí),會(huì)產(chǎn)生語法歧義: 
        2. function delete void typeof new null true false NumericLiteral StringLiteral RegularExpressionLiteral ( [ { Identifier ++ -- + - ~ ! 
        3. 其中,function和delete是非常常用的statement開頭。
        4. 特別是 ++和--單獨(dú)被斷為一行的時(shí)候,因?yàn)镴S的語法規(guī)則規(guī)定后自增運(yùn)算不允許中間插入換行,所以++和--會(huì)被視為前自增而跟下一行連接在一起。
        5. 第二種是return作為上一行結(jié)尾的情況,下一行以以下開頭時(shí),會(huì)產(chǎn)生語法歧義:
        6. function delete void typeof ( [ { Identifier ++ -- + - ~ !
        7. 同樣因?yàn)镴S語法的規(guī)則不允許在return 和后面的值之間插入換行,所以return之后只要有換行符就會(huì)視為有分號(hào),這常常會(huì)與使用者的期望不符合。
        8. 第三種是下一行以+和-開頭的情況,上一行以以下結(jié)尾是,會(huì)產(chǎn)生語法歧義:
        9. -- ++ IdentifierName ] ) } RegularExpressionLiteral
        10. 因?yàn)楹苌儆姓Z句以+或者-開頭,所以這種情況不算危險(xiǎn)。
        11. 第四種是上一行以break、continue結(jié)尾的情況,下一行以Identifier開頭時(shí),會(huì)產(chǎn)生語法歧義。
        12. 第五種是下一行以(和[開頭的情況,上一行以以下結(jié)尾是,會(huì)產(chǎn)生語法歧義:
        13. -- ++ IdentifierName ] ) } RegularExpressionLiteral StringLiteral NumericLiteral BooleanLiteral NullLiteral Identifier this 
        14. 這種情況非常危險(xiǎn)(所以hax的文章中要提出這種情況應(yīng)該語句前寫分號(hào)),幾乎上一行的所有情況都將導(dǎo)致正常期望之外的結(jié)果。
        15. 第六種是,當(dāng)下一行以RegularExpressionLiteral 開頭的情況,上一行的以下結(jié)尾,會(huì)導(dǎo)致/被理解為除號(hào):
        16. -- ++ IdentifierName ] ) }  RegularExpressionLiteral StringLiteral NumericLiteral BooleanLiteral NullLiteral Identifier this

        總結(jié),

        1. 在return、break、continue、后自增、后自減五種語句中,換行符可以完全替代分號(hào)的作用。
        2. var if do while for continue break return with switch throw try debugger幾種關(guān)鍵字開頭的語句,以及空語句,上一行加不加分號(hào)影響不大。
        3. 凡表達(dá)式語句和函數(shù)表達(dá)式語句,后面不加分號(hào)非常危險(xiǎn),情況極其復(fù)雜。
        4. 凡(和[開頭的語句,前面不加分號(hào)極度危險(xiǎn)。

        下面在通過實(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

        文檔

        關(guān)于JavaScript語句后面的分號(hào)問題

        關(guān)于JavaScript語句后面的分號(hào)問題:JavaScript自動(dòng)加分號(hào)規(guī)則,有3條 當(dāng)有換行符(包括含有換行符的多行注釋),并且下一個(gè)token沒法跟前面的語法匹配時(shí),會(huì)自動(dòng)補(bǔ)分號(hào)。 當(dāng)有}時(shí),如果缺少分號(hào),會(huì)補(bǔ)分號(hào) 當(dāng)程序源代碼結(jié)束時(shí),如果缺少分號(hào),會(huì)補(bǔ)分號(hào)。 利用我自己的JS語法分析工具JSi
        推薦度:
        標(biāo)簽: 分號(hào) js 問題
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲AV无码成人网站在线观看| 妞干网在线免费视频| 亚洲性猛交XXXX| 成年女人男人免费视频播放| 亚洲成av人片不卡无码| 亚洲国产精品无码久久久久久曰| 特级毛片A级毛片免费播放| 亚洲精品中文字幕乱码影院| 全免费a级毛片免费**视频| 女人隐私秘视频黄www免费| 亚洲jjzzjjzz在线观看| 亚洲精品乱码久久久久久中文字幕 | 亚洲av无码专区国产不乱码| 亚洲成A人片在线观看无码不卡| 最近最新MV在线观看免费高清| 精品国产福利尤物免费| 亚洲日本视频在线观看| 亚洲欧洲日产国码二区首页| 2048亚洲精品国产| 免费一级毛片女人图片| 蜜桃精品免费久久久久影院| 无人在线直播免费观看| 91精品视频在线免费观看| 亚洲成人在线免费观看| 久久免费视频99| 小日子的在线观看免费| 三年片在线观看免费大全 | yellow视频免费在线观看| 免费无遮挡无遮羞在线看| 精品亚洲国产成人av| 国产亚洲精品美女2020久久| 亚洲AV无码AV男人的天堂不卡| 校园亚洲春色另类小说合集| 免费激情网站国产高清第一页| 国产免费A∨在线播放| 99国产精品视频免费观看| 日本免费一区二区三区| 免费在线观看的黄色网址| 亚洲Av无码国产情品久久| 亚洲av无码乱码国产精品fc2| 亚洲国产成人资源在线软件|