在JS中调用数字文字的函数有哪些规则?

时间:2012-05-02 16:19:41

标签: javascript

自从我开始使用JS以来,我认为在数字文字上调用函数的唯一方法是通过用parens包装它来将它放在表达式位置,如下所示:

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.后跟任何数字将始终是十进制数,而不是方法调用或属性访问。

1 个答案:

答案 0 :(得分:5)

一旦看到.中的第一个0.1,后续的. 就不能成为该号码的一部分。

这完全是歧义。

编辑 - 规范第7.8.3节明确坚持这一点:

  

紧跟NumericLiteral之后的源字符不能是 IdentifierStart DecimalDigit

我不确定究竟是什么阻止,但JavaScript词法分析器非常粗糙,主要归功于正则表达式文字语法以及需要一个奇怪的解析器 - 词法分析器黑客来处理它。