摘要:許多程序員包括本書中的示例代碼使用分號來明確標記語句的結束,即使在并不完全需要分號的時候也是如此。為了能讓上述代碼解析為兩條不同的語句,必須手動填寫行尾的顯式分號。第一個例外是在涉及和語句的場景中。
和其他許多編程語言一樣,JavaScript使用分號(;)將語句分隔 開。這對增強代碼的可讀性和整潔性是非常重要的:缺少分隔符,一條語句的結束 就成了下一條語句的開始,反之亦然。在JavaScript中,如果語句各自獨占一行,通 常可以省略語句之間的分號(程序結尾或右花括號“}”之前的分號也可以省略)。
許多JavaScript程序員(包括本書中的示例代碼)使用分號來明確標記語句的結束, 即使在并不完全需要分號的時候也是如此。另一種風格就是,在任何可以省略分號 的地方都將其省略,只有在不得不用的時候才使用分號。不管采用哪種編程風格, 關于JavaScript中可選分號的問題有幾個細節需要注意。
考慮如下代碼,因為兩條語句用兩行書寫,第一個分號是可以省略掉的:
a=3; b=4;
如果按照如下格式書寫,第一個分號則不能省略掉:
a=3;b=4;
需要注意的是,JavaScript并不是在所有換行處都填補分號:只有在缺少了分號 就無法正確解析代碼的時候,JavaScript才會填補分號。 換句話講(類似下面代碼中的兩處異常),如果當前語句和隨后的非空格字符不能當成一個整體來解析的話, JavaScript就在當前語句行結束處填補分號。看一下如下代碼:
var a a = 3 console.log(a)
JavaScript將其解析為:
var a;a=3;console.log(a);
JavaScript給第一行換行處添加了分號,因為如果沒有分號,JavaScript就無法解析代碼 var a a。第二個a可以多帶帶當做一條語句“a;”,但JavaScript并沒有給第二行結 尾填補分號,因為它可以和第三行內容一起解析成 “a=3;”。
這些語句的分隔規則會導致一些意想不到的情形,這段代碼寫成了兩行,看起來是兩條獨立的語句:
var y=x+f (a+b).toString()
但第二行的圓括號卻和第一行的f組成了一個函數調用,JavaScript會把這段代 碼看做:
var y=x+f(a+b).toString();
而這段代碼的本意并不是這樣。為了能讓上述代碼解析為兩條不同的語句,必須手動填寫行尾的顯式分號。
通常來講,如果一條語句以“(”、“[”、“/”、“+”或“-”開始,那么它極有可能和前一條語句合在一起解析。
以“/”、“+”和“-”開始的語句并不常見,而以“(”和“[”開始的 語句則非常常見,至少在一些JavaScript編碼風格中是很普遍的。有些程序員喜歡保守地在語句前加上一個分號(有些代碼合并工具也是這么干的),這樣哪怕之前的語句被修改了、分號被誤刪除了,當 前語句還是會正確地解析:
var x=0//這里省略了分號 ;[x,x+1,x+2].forEach(console.log)//前面的分號保證了正確地語句解析
如果當前語句和下一行語句無法合并解析,JavaScript則在第一行后填補分號, 這是通用規則,但有兩個例外。第一個例外是在涉及 return、break 和 continue 語句的場景中。如果這三個關鍵字后緊跟著換行,JavaScript則會在換行 處填補分號。例如,這段代碼:
return true;
JavaScript會解析成:
return;true;
而代碼的本意是這樣:
return true;
也就是說,在 return、break 和 continue 和隨后的表達式之間不能有換行。如果添加了換行,程序則只有在極特殊的情況下才會報錯,而且程序的調試非常不方便。
第二個例外是在涉及“++”和“——”運算符的時候。這些運算符可以 作為表達式的前綴,也可以當做表達式的后綴。如果將其用做后綴表達式,它和表 達式應當在同一行。否則,行尾將填補分號,同時“++”或“——”將會作為下一行代 碼的前綴操作符并與之一起解析,例如,這段代碼:
x ++ y
這段代碼將解析為“x;++y”,而不是“x++;y”。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/84889.html
摘要:自動填補分號的規則在說要不要寫分號之前,先了解一下自動填補分號的規則。后來看到知乎上的作者尤雨溪和前端大神賀師俊的回答后,我對寫分號的想法完全顛覆了。總是寫分號并不能完全解決缺陷如后換行會自動插入分號。 在打算寫這篇文章之前,我是一個分號黨,在寫這篇文章之后,可能會轉為無分號黨了。之前是寫分號是編輯器語法較檢所養成的強迫癥,現在觀念的轉變,是因為看了不少大神的討論后,覺得javascr...
摘要:花點時間搞清楚中的分號規則吧不管你喜歡結尾帶分號或省略分號的模式分號允許的場景分號一般允許出現在大部分語句的末尾,比如等栗子僅有一個分號可以表示空語句在中合法,比如可解析為三個空語句空語句可用于輔助產生語法合法的解析結果,如如果沒有末尾的 花點時間搞清楚JS中的分號規則吧~~~不管你喜歡結尾帶分號或省略分號的模式 分號允許的場景 分號一般允許出現在大部分語句(statement)的末尾...
摘要:中分號自動插入轉譯自鏈接描述在中,分號自動插入機制允許在一行代碼結尾省略分號。比如分號自動插入規則分號插入只是一個術語。如果在這些位置遇到換行了,分號將被插入。 JavaScript中分號自動插入 轉譯自:鏈接描述在JavaScript中,分號自動插入機制允許在一行代碼結尾省略分號。你應該養成一直書寫分號的習慣,與此同時掌握JavaScript分號省略處理機制是十分重要的。因為這不僅有...
摘要:規則三循環及空循環體的不能省略分號如最后我想說的是分號的省略與否完全是個人的編碼風格,所以初學者不必死鉆牛角尖,弄清楚原理才是最重要的。 傳統的編程語言中分號是不可省略的,但在看JavaScript代碼時,新手常常會發現很多知名的大牛們都省略了分號,為什么會這樣呢?其實是因為JavaScript的自動插入分號技術,大多數情況下分號是可以省略的,下面說說自動插入分號的規則。 規則一:Ja...
摘要:此時會自動插入分號,解析器將再次嘗試。工作原理下面的代碼沒有分號,因此解析器將會自己判斷在哪些地方插入分號。前置小括號在有前置小括號的情形時,解析器將不會自動插入分號。這不僅將保證代碼整體的一致性,也將有效地避免解析器對代碼行為的錯誤改變。 盡管 Javascript 有類似 C 的句法風格,但是它并不強制在代碼中使用分號,所以分號可能被省略。Javascript 并不是一個缺少分號的...
閱讀 1640·2023-04-25 20:36
閱讀 2049·2021-09-02 15:11
閱讀 1177·2021-08-27 13:13
閱讀 2653·2019-08-30 15:52
閱讀 4589·2019-08-29 17:13
閱讀 1001·2019-08-29 11:09
閱讀 1491·2019-08-26 11:51
閱讀 833·2019-08-26 10:56