<script>
1..z
</script>
Run Code Online (Sandbox Code Playgroud)
这不会产生语法或运行时错误.看起来数字和变量名称可以是任何其他(123..qwerty).我想知道这句话是什么意思?
CMS*_*CMS 33
是不是一个范围内,1..z表达将简单地返回undefined.
为什么?
第一个点结束了Numeric Literal的表示,为您提供了一个Number原语:
var n = 1.;
Run Code Online (Sandbox Code Playgroud)
Numeric Literal的语法表达如下:
DecimalIntegerLiteral . DecimalDigitsopt ExponentPartopt
Run Code Online (Sandbox Code Playgroud)
正如您可以看到点后面的DecimalDigits部分是可选的(opt后缀).
第二个点是属性访问器,它只会尝试获取z属性,这是undefined因为它不存在于Number.prototype对象上:
1..z; // undefined
1..toString(); // "1"
Run Code Online (Sandbox Code Playgroud)
相当于使用括号表示法属性访问器访问属性:
1['z']; // or
1['toString']();
Run Code Online (Sandbox Code Playgroud)
结合这些:
alert(1.foo); // --> parse error
alert(1.4.foo); // --> undefined - number 1.4 doesn't have the property foo
alert(1.); // --> 1 (?)
Run Code Online (Sandbox Code Playgroud)
得出结论:
alert(1..foo); // --> undefined
Run Code Online (Sandbox Code Playgroud)