以下JavaScript代码:
alert(2 .x);
提醒'未定义'(请参阅此处:http://jsfiddle.net/Rp4wk/)
(注意:'2'和'.x'之间的空格是预期的)
简单的问题:为什么?特别是当以下yield语法错误时:
alert(2.x);
alert(2. x);
任何?
答案 0 :(得分:8)
.
是一名运营商。 2
是一个数字。 x
是(视为)属性名称。
浮点数字常量不得包含嵌入空格。因此,2 .x
是一个表达式,要求将常量2
提升为Number对象,然后检查名为“x”的属性。当然,没有一个,因此值为undefined
。
您可以使用
更明确地获得相同的效果alert((2).x);
请注意
alert("Hello".x);
有点类似:在这种情况下,它不是数字常量,它是字符串常量。它不那么奇怪,因为没有涉及语法上有趣的业务,但是在评估时,解释器会做类似的事情。首先将字符串常量转换为String对象,然后获取“x”属性。
编辑 - 澄清一点,2.x
是一个错误,因为它被解析为数字常量(“2。”)后跟标识符“x”,这是一种语法错误;两个值彼此相邻放置,没有中间操作符,不会在语言中形成任何类型的构造。