JavaScript中點號“.”的多義性


點號「.」在JavaScript中有兩種語義

語義1、表示算術中的小數點(浮點數),如 2.5

語義2、取對象屬性、方法,如 [].push(2)

 

這幾乎沒有任何難理解的地方,但下面這個問題則很有趣。

// 這行代碼會如何執行
1.toString();

Firebug 中如下

這里的點號表達的是上述的語義1,因此點號后面必須跟一個數字,這里跟的是toString,報語法錯了。

 

解決方法很簡單,如加個小括號

(1).toString();

 

還可以這么寫,但難理解些

1..toString();

之所以瀏覽器中都能運行,是因為各瀏覽器JS引擎都把“1..toString()”理解成了 “1.0.toString()”。這里第一個點號是語義1,第二個點號是語義2

 

還有更奇怪的寫法,竟然也沒有報錯

1 .toString(); // 注意點號前面有一個空格

顯然,這里的點號是語義2,即JS引擎會忽略點運算符前邊的空格,其實無論前后的空格都會忽略。如下

1 . toString(); // 點號前后都有一個空格
1  .  toString(); // 點號前后各有兩個空格
1    .toString(); // 點號前有一個tab
1    .    toString(); // 點號前后各有一個tab

JS引擎不但會忽略空格,也會忽略tab。

 

相關:

Javascript中大括號“{}”的多義性

Javascript中中括號“[]”的多義性

Javascript小括號“()”的多義性

http://bonsaiden.github.io/JavaScript-Garden/

 


免責聲明!

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



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