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