国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

javascript 分號總結及詳細介紹

2024-05-06 15:09:15
字體:
來源:轉載
供稿:網友

javascript每條語句都是以分號結束,但由于javascript具有分號自動插入規則,所有不同的編程人員有不同的習慣,有的加分號,有的不加分號,那么到底加分號好還是不加分號好?本文章向大家探討javascript每條語句該不該加分號。

javascript的分號代表語句的結束符,但由于javascript具有分號自動插入規則,所以它是一個十分容易讓人模糊的東西,在一般情況下,一個換行就會產生一個分號,但實際情況卻不然,也就是說在javascript中換行可能產生分號,也可能不產生,是否自動插入分號,主要看上下行。所以即使是經驗豐富的程序員,有時候也會頭大。

JavaScript自動加分號規則:

    當有換行符(包括含有換行符的多行注釋),并且下一個token沒法跟前面的語法匹配時,會自動補分號。 當有}時,如果缺少分號,會補分號。 當程序源代碼結束時,如果缺少分號,會補分號。

接下來我們來分組看不加分號導致的語法歧義:

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

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

同樣因為JS語法的規則不允許在return 和后面的值之間插入換行,所以return之后只要有換行符就會視為有分號,這常常會與使用者的期望不符合。

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

因為很少有語句以+或者-開頭,所以這種情況不算危險。

第四種是上一行以break、continue結尾的情況,下一行以Identifier開頭時,會產生語法歧義。

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

第六種是,當下一行以RegularExpressionLiteral 開頭的情況,上一行的以下結尾,會導致/被理解為除號:
-- ++ IdentifierName ] ) }  RegularExpressionLiteral StringLiteral NumericLiteral BooleanLiteral NullLiteral Identifier this

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 老河口市| 罗江县| 新野县| 响水县| 龙里县| 承德市| 合水县| 霍林郭勒市| 安图县| 峡江县| 寿宁县| 凤台县| 衡东县| 石家庄市| 沈阳市| 高阳县| 克拉玛依市| 江油市| 北辰区| 襄樊市| 隆回县| 福贡县| 盱眙县| 昌宁县| 印江| 东港市| 临西县| 杂多县| 吴旗县| 巴青县| 沂源县| 鄂托克前旗| 石楼县| 辽阳市| 田阳县| 武强县| 金华市| 乃东县| 琼中| 内丘县| 湟中县|