自从我开始使用 JS 以来,我一直认为在数字文字上调用函数的唯一方法是通过用括号将其包装在表达式位置,如下所示:
1.toString();
// SyntaxError: identifier starts immediately after numeric literal
(1).toString();
// "1"
今天突然想试试这个:
0.1.toString();
// "0.1"
为什么这行得通?指向官方规范的指针会很棒。
编辑歧义是我的第一个想法,但后来决定两者都没有歧义1.toString()
。它比我最初想象的要深,但我仍然认为我是对的。原因如下:
属性名称可以以数字开头
var obj = { "1" : 1, "2" : 2 };
以数字开头的属性名只能用方括号引用
obj.1;
// SyntaxError: Unexpected token ILLEGAL
obj['1'];
// 1
还:
1['toString']();
// '1'
因此,1.
后面跟任何非数字将始终是方法调用或属性访问,而不是十进制数字。同样,1.
后面的任何数字始终是十进制数,绝不是方法调用或属性访问。