这个javascript语法是什么?

时间:2014-10-18 18:40:13

标签: javascript

有人可以详细解释这里发生了什么吗?特别是双点表示法。

(3.14).toFixed(); // "3"
3.14.toFixed(); // "3"

(3).toFixed(); // "3"
3.toFixed(); // SyntaxError: Unexpected token ILLEGAL
3..toFixed(); // "3"    

source

2 个答案:

答案 0 :(得分:9)

根据ECMA Script 5.1 Specifications,十进制文字的语法定义如下

DecimalLiteral ::

   DecimalIntegerLiteral . [DecimalDigits] [ExponentPart]

   . DecimalDigits [ExponentPart]

   DecimalIntegerLiteral [ExponentPart]

注意:方括号仅表示部件是可选的。

所以,当你说

3.toFixed()

在使用3.后,解析器认为当前令牌是Decimal Literal的一部分,但只能跟DecimalDigitsExponentPart。但它找到了t,这是无效的,这就是它因 SyntaxError 而失败的原因。

当你做

3..toFixed()

使用3.后,会看到.,称为属性访问者运算符。因此,它省略了可选的DecimalDigitsExponentPart并构造了一个浮点对象并继续调用toFixed()方法。

克服这个问题的一种方法是在数字之后留一个空格,比如

3 .toFixed()

答案 1 :(得分:8)

3.是一个数字,因此.是小数点,并且不会启动属性。

3..something是一个后跟属性的数字。