js中冒號的作用


說到這個題目,先從今天和朋友討論一個問題開始。{a:1,b:2}直接在控制台輸出時會報錯“Uncaught SyntaxError: Unexpected token :”;一開始不能理解,一個再正常不過的對象,為什么會報錯呢?其實分析下就知道,{}在js中除了表示對象直接量外,還表示語句塊;如果一個語句以“{”開頭時,js引擎將{}解析為語句塊,所以{a:1,b:2}並未被解析為對象,而是被解析為了語句a:1,b:2。

分析到這里,似乎與題目沒有任何關系,剛開始也以為討論到此結束,但當測試{a:1}的時候,控制台會輸出1,而不是報錯。為什么呢?a:1當作語句處理的時候是什么意思呢?所以上面出現的問題應該不只是被解析為語句塊這么簡單。

下面我們進入正題,正如題目所寫,我們要分析的是js中的冒號的作用,相信學過js的人都知道js中常用到冒號的地方有三處,分別是:1)A ? B : C 三元操作符;2)switch case語句中;3)對象直接量;很明顯上面的問題與這三者沒有關系。那除了這三種用法外,冒號還有什么作用呢?其實冒號在js中還有一個不常用的用途,即標簽語句。在js中,任何語句都可以通過在它前面加上標志符和冒號來標記:identifier: statement,這樣就可以在任何地方使用該標記,最常用於for循環中。

現在回到最初報錯的問題上,通過對冒號作用的分析最終可得到,{a:1,b:2}單獨運行時等同於a:(1,b:2),括號中的語句導致錯誤的產生。

 

補充:首先感謝@Lumia1020的回復,根據@Lumia1020的問題,我加上代碼做如下補充:

1)標簽語句在for循環中的作用;代碼如下:

label1:
   for(var i = 0; i < 5; i++) {
     if(i == 2) {
         break label1;
     }
   }

這樣的作用是,當i等於2的時候跳出for循環。

2)問題中的{a:1,b:2}實際上是由兩個標簽語句構成,等同於語句:

a:
   1,b:
         2

中間的1,b:在解析時會報錯。

注:本文僅作為學習過程中的簡單記錄,如有問題請提出並指教。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM