欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript 分號(hào)總結(jié)及詳細(xì)介紹

 更新時(shí)間:2016年09月24日 14:27:24   投稿:lqh  
這篇文章主要介紹了javascript 分號(hào)總結(jié)及詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下

javascript每條語句都是以分號(hào)結(jié)束,但由于javascript具有分號(hào)自動(dòng)插入規(guī)則,所有不同的編程人員有不同的習(xí)慣,有的加分號(hào),有的不加分號(hào),那么到底加分號(hào)好還是不加分號(hào)好?本文章向大家探討javascript每條語句該不該加分號(hào)。

javascript的分號(hào)代表語句的結(jié)束符,但由于javascript具有分號(hào)自動(dòng)插入規(guī)則,所以它是一個(gè)十分容易讓人模糊的東西,在一般情況下,一個(gè)換行就會(huì)產(chǎn)生一個(gè)分號(hào),但實(shí)際情況卻不然,也就是說在javascript中換行可能產(chǎn)生分號(hào),也可能不產(chǎn)生,是否自動(dòng)插入分號(hào),主要看上下行。所以即使是經(jīng)驗(yàn)豐富的程序員,有時(shí)候也會(huì)頭大。

JavaScript自動(dòng)加分號(hào)規(guī)則:

  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)。

接下來我們來分組看不加分號(hào)導(dǎo)致的語法歧義:

第一種是++和--兩種運(yùn)算符出現(xiàn)在上一行結(jié)尾的情況,下一行以以下開頭時(shí),會(huì)產(chǎn)生語法歧義: 
function delete void typeof new null true false NumericLiteral StringLiteral RegularExpressionLiteral ( [ { Identifier ++ -- + - ~ ! 
其中,function和delete是非常常用的statement開頭。
特別是 ++和--單獨(dú)被斷為一行的時(shí)候,因?yàn)镴S的語法規(guī)則規(guī)定后自增運(yùn)算不允許中間插入換行,所以++和--會(huì)被視為前自增而跟下一行連接在一起。

第二種是return作為上一行結(jié)尾的情況,下一行以以下開頭時(shí),會(huì)產(chǎn)生語法歧義:
function delete void typeof ( [ { Identifier ++ -- + - ~ !

同樣因?yàn)镴S語法的規(guī)則不允許在return 和后面的值之間插入換行,所以return之后只要有換行符就會(huì)視為有分號(hào),這常常會(huì)與使用者的期望不符合。

第三種是下一行以+和-開頭的情況,上一行以以下結(jié)尾是,會(huì)產(chǎn)生語法歧義:
-- ++ IdentifierName ] ) } RegularExpressionLiteral

因?yàn)楹苌儆姓Z句以+或者-開頭,所以這種情況不算危險(xiǎn)。

第四種是上一行以break、continue結(jié)尾的情況,下一行以Identifier開頭時(shí),會(huì)產(chǎn)生語法歧義。

第五種是下一行以(和[開頭的情況,上一行以以下結(jié)尾是,會(huì)產(chǎn)生語法歧義:
-- ++ IdentifierName ] ) } RegularExpressionLiteral StringLiteral NumericLiteral BooleanLiteral NullLiteral Identifier this 
這種情況非常危險(xiǎn)(所以hax的文章中要提出這種情況應(yīng)該語句前寫分號(hào)),幾乎上一行的所有情況都將導(dǎo)致正常期望之外的結(jié)果。

第六種是,當(dāng)下一行以RegularExpressionLiteral 開頭的情況,上一行的以下結(jié)尾,會(huì)導(dǎo)致/被理解為除號(hào):
-- ++ IdentifierName ] ) }  RegularExpressionLiteral StringLiteral NumericLiteral BooleanLiteral NullLiteral Identifier this

實(shí)踐出真理,看一下下面這些例子,就明白,分號(hào)自動(dòng)插入不是那么好讓人捉摸的。稍微不注意就會(huì)讓你頭大。

return引起的血案:

function test(){
  var a = 1;
  var b = 2;
  return //會(huì)自動(dòng)插入分號(hào)
    (
     a+b
    )
};
alert(test());

一個(gè)返回a+b值的函數(shù),初看沒任何問題,但運(yùn)行alert的結(jié)果卻是undefined。根據(jù)分號(hào)的自動(dòng)插入規(guī)則,return 語句后面如果有換行就會(huì)自動(dòng)插入分號(hào),沒有返回值也就比較好理解了。如果需要換行的話,可以這樣:

function test(){
  var a = 1;
  var b = 2;
  return ( 
      a+b
     )
};
alert(test());

兩個(gè)閉包引起的血案:

(function (){
 var a;
})() //不會(huì)自動(dòng)插入分號(hào)
(function (){
 var b;
})()

很詭異,解釋不了,誰能告訴我~

for語句頭中的兩個(gè)分號(hào),不自動(dòng)插入分號(hào)

for( var a=1,b=10 //不會(huì)自動(dòng)插入分號(hào)
     a<b //不會(huì)自動(dòng)插入分號(hào)
     a++ 
  )
{}

總結(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)。

以上就是對(duì)JavaScript 分號(hào)的資料整理,后續(xù)繼續(xù)補(bǔ)充相關(guān)資料,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • js如何清空input?file的值

    js如何清空input?file的值

    這篇文章主要介紹了js如何清空input?file的值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 淺談JavaScript正則表達(dá)式-非捕獲性分組

    淺談JavaScript正則表達(dá)式-非捕獲性分組

    下面小編就為大家?guī)硪黄狫avaScript正則表達(dá)式-非捕獲性分組。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • 使用JavaScript實(shí)現(xiàn)貪吃蛇游戲

    使用JavaScript實(shí)現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細(xì)介紹了使用JavaScript實(shí)現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • js獲取url中指定參數(shù)值的示例代碼

    js獲取url中指定參數(shù)值的示例代碼

    這篇文章主要是對(duì)js獲取url中指定參數(shù)值的示例代碼進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2013-12-12
  • JavaScript中對(duì)象屬性描述符的使用詳解

    JavaScript中對(duì)象屬性描述符的使用詳解

    屬性描述符是 ECMAScript 5 新增的語法,它其實(shí)就是一個(gè)內(nèi)部對(duì)象,用來描述對(duì)象的屬性的特性,下面小編就來為大家詳細(xì)介紹一下js中對(duì)象屬性描述符的使用,需要的可以參考下
    2023-11-11
  • 在TypeScript項(xiàng)目中搭配Axios封裝后端接口調(diào)用

    在TypeScript項(xiàng)目中搭配Axios封裝后端接口調(diào)用

    這篇文章主要介紹了在TypeScript項(xiàng)目中搭配Axios封裝后端接口調(diào)用,本文記錄一下在?TypeScript?項(xiàng)目里封裝?axios?的過程,之前在開發(fā)?StarBlog-Admin?的時(shí)候已經(jīng)做了一次封裝,不過那時(shí)是JavaScript跟TypeScript還是有些區(qū)別的,需要的朋友可以參考下
    2024-01-01
  • js實(shí)現(xiàn)1,2,3,5數(shù)字按照概率生成

    js實(shí)現(xiàn)1,2,3,5數(shù)字按照概率生成

    這篇文章主要介紹了js實(shí)現(xiàn)1,2,3,5數(shù)字按照概率生成,需要的朋友可以參考下
    2017-09-09
  • JS取文本框中最小值的簡單實(shí)例

    JS取文本框中最小值的簡單實(shí)例

    這篇文章主要介紹了JS取文本框中最小值的簡單實(shí)例,有需要的朋友可以參考一下
    2013-11-11
  • 關(guān)于JS中的方法是否加括號(hào)的問題

    關(guān)于JS中的方法是否加括號(hào)的問題

    在我們js編寫程序的時(shí)候,我們會(huì)寫很多函數(shù)然后調(diào)用它們,那么這些函數(shù)調(diào)用的時(shí)候什么時(shí)候加()什么時(shí)候不加()呢?下面小編給大家簡單介紹下
    2016-07-07
  • 詳解ES6中的代理模式——Proxy

    詳解ES6中的代理模式——Proxy

    這篇文章主要介紹了詳解ES6中的代理模式——Proxy,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01

最新評(píng)論