4
下面的JavaScript代碼:這是怎麼回事這個比較奇特的JavaScript語法
alert(2 .x);
通知 '未定義'(見這裏:http://jsfiddle.net/Rp4wk/)
(注: '2' 之間的空間, '.x'是打算)
簡單的問題:爲什麼?特別是當下列產量語法錯誤時:
alert(2.x);
alert(2. x);
任何人?
下面的JavaScript代碼:這是怎麼回事這個比較奇特的JavaScript語法
alert(2 .x);
通知 '未定義'(見這裏:http://jsfiddle.net/Rp4wk/)
(注: '2' 之間的空間, '.x'是打算)
簡單的問題:爲什麼?特別是當下列產量語法錯誤時:
alert(2.x);
alert(2. x);
任何人?
.
是一個操作符。 2
是一個數字。 x
(被視爲)屬性名稱。
浮點數字常量不能有嵌入空格。因此,2 .x
是一個表達式,要求將常量2
提升爲Number對象,然後檢查名爲「x」的屬性。當然沒有,所以價值是undefined
。
您可以更明確一點得到相同的效果與
alert((2).x);
注意
alert("Hello".x);
有些類似:在這種情況下,它不是一個數值常量,它是一個串不變。它不那麼奇怪,因爲沒有任何涉及句法的有趣業務,但否則解釋者在評估時會做類似的事情。字符串常量首先轉換爲一個String對象,然後獲取「x」屬性。
編輯 —澄清一點,2.x
是之後是標識符「X」的誤差,因爲它的解析爲一個數值常數(「2」),這是一個語法錯誤;兩個值彼此相鄰的值並沒有介入操作符,因此不會在語言中形成任何類型的構造。
神聖的任務蝙蝠俠。發現得好。這證明了它:`Number.prototype.x =「你好」; alert(2.x);` – mplungjan 2011-01-24 15:44:02