这种相当奇特的JavaScript语法会发生什么

时间:2011-01-24 15:36:44

标签: javascript

以下JavaScript代码:

alert(2 .x);

提醒'未定义'(请参阅此处:http://jsfiddle.net/Rp4wk/

(注意:'2'和'.x'之间的空格是预期的)

简单的问题:为什么?特别是当以下yield语法错误时:

alert(2.x);
alert(2. x);

任何?

1 个答案:

答案 0 :(得分:8)

.是一名运营商。 2是一个数字。 x是(视为)属性名称。

浮点数字常量不得包含嵌入空格。因此,2 .x是一个表达式,要求将常量2提升为Number对象,然后检查名为“x”的属性。当然,没有一个,因此值为undefined

您可以使用

更明确地获得相同的效果
alert((2).x);

请注意

alert("Hello".x);

有点类似:在这种情况下,它不是数字常量,它是字符串常量。它不那么奇怪,因为没有涉及语法上有趣的业务,但是在评估时,解释器会做类似的事情。首先将字符串常量转换为String对象,然后获取“x”属性。

编辑 - 澄清一点,2.x是一个错误,因为它被解析为数字常量(“2。”)后跟标识符“x”,这是一种语法错误;两个值彼此相邻放置,没有中间操作符,不会在语言中形成任何类型的构造。