解析JavaScript中點(diǎn)號(hào)“.”的多義性
點(diǎn)號(hào)「.」在JavaScript中有兩種語(yǔ)義
語(yǔ)義1、表示算術(shù)中的小數(shù)點(diǎn)(浮點(diǎn)數(shù)),如 2.5
語(yǔ)義2、取對(duì)象屬性、方法,如 [].push(2)
這幾乎沒(méi)有任何難理解的地方,但下面這個(gè)問(wèn)題則很有趣。
// 這行代碼會(huì)如何執(zhí)行
1.toString();
Firebug 中如下

這里的點(diǎn)號(hào)表達(dá)的是上述的語(yǔ)義1,因此點(diǎn)號(hào)后面必須跟一個(gè)數(shù)字,這里跟的是toString,報(bào)語(yǔ)法錯(cuò)了。
解決方法很簡(jiǎn)單,如加個(gè)小括號(hào)
(1).toString();
還可以這么寫(xiě),但難理解些
1..toString();
之所以瀏覽器中都能運(yùn)行,是因?yàn)楦鳛g覽器JS引擎都把“1..toString()”理解成了 “1.0.toString()”。這里第一個(gè)點(diǎn)號(hào)是語(yǔ)義1,第二個(gè)點(diǎn)號(hào)是語(yǔ)義2。
還有更奇怪的寫(xiě)法,竟然也沒(méi)有報(bào)錯(cuò)
1 .toString(); // 注意點(diǎn)號(hào)前面有一個(gè)空格
顯然,這里的點(diǎn)號(hào)是語(yǔ)義2,即JS引擎會(huì)忽略點(diǎn)運(yùn)算符前邊的空格,其實(shí)無(wú)論前后的空格都會(huì)忽略。如下
1 . toString(); // 點(diǎn)號(hào)前后都有一個(gè)空格
1 . toString(); // 點(diǎn)號(hào)前后各有兩個(gè)空格
1 .toString(); // 點(diǎn)號(hào)前有一個(gè)tab
1 . toString(); // 點(diǎn)號(hào)前后各有一個(gè)tab
JS引擎不但會(huì)忽略空格,也會(huì)忽略tab。
相關(guān)文章
等待指定時(shí)間后自動(dòng)跳轉(zhuǎn)或關(guān)閉當(dāng)前頁(yè)面的js代碼
本文為大家詳細(xì)介紹下如何通過(guò)js實(shí)現(xiàn)等待指定時(shí)間后自動(dòng)跳轉(zhuǎn)或關(guān)閉當(dāng)前頁(yè)面的腳步代碼,感興趣的朋友可以參考下哈,希望對(duì)大家有所幫助2013-07-07
使用JavaScript實(shí)現(xiàn)小球按照貝塞爾曲線運(yùn)動(dòng)
要在 JavaScript 中實(shí)現(xiàn)一個(gè)按照貝塞爾曲線運(yùn)動(dòng)的小球,關(guān)鍵是要掌握貝塞爾公式的基本原理和實(shí)現(xiàn)方式,以及使用 JavaScript 處理動(dòng)畫(huà)和物理運(yùn)算,感興趣的小伙伴跟著小編一起來(lái)看看吧2024-10-10
淺談js中StringBuffer類(lèi)的實(shí)現(xiàn)方法及使用
下面小編就為大家?guī)?lái)一篇淺談js中StringBuffer類(lèi)的實(shí)現(xiàn)方法及使用。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09
Javascript 拖拽的一些高級(jí)的應(yīng)用(逐行分析代碼,讓你輕松了拖拽的原理)
這篇文章主要介紹了Javascript 拖拽的一些高級(jí)的應(yīng)用(逐行分析代碼,讓你輕松了拖拽的原理),需要的朋友可以參考下2015-01-01

