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