为什么00.0导致语法错误?

时间:2015-05-21 08:54:06

标签: javascript numbers syntax-error

这很奇怪。这就是Chrome中的JavaScript控制台(版本42.0.2311.135,64位)所发生的情况。

> 0
< 0
> 00
< 0
> 0.0
< 0
> 00.0
X Uncaught > SyntaxError: Unexpected number

Firefox 37.0.2也是如此,但错误信息是:

SyntaxError: missing ; before statement

关于JavaScript解析数字的方式可能有一些技术性的解释,也许它只能在修改控制台提示符时发生,但它似乎仍然是错误的。

为什么这样做?

2 个答案:

答案 0 :(得分:77)

表达式0.000.0的解析方式不同。

  • 0.0被解析为数字文字 1
  • 00.0被解析为:
    • 00 - 八进制数字文字 2
    • . - 属性访问者
    • 0 - 标识符名称

您的代码会引发语法错误,因为0不是有效的JavaScript标识符。以下示例有效,因为toString是有效的标识符:

00.toString

1 Section 7.8.3 - 前导0后面可以跟着小数点分隔符 ExponentPart
2 Section B.1.1 - 前导0后面可以跟 OctalDigits

答案 1 :(得分:22)

00被评估为八进制数,.0被评估为访问该数字的属性。但由于不允许将整数用作属性访问器,因此会抛出错误。

对于任何其他对象,您会收到相同的错误:

'string'.0 // Syntax error: unexpected number
({}).0 // Syntax error: unexpected number

您可以在MDN上找到有关属性访问者的相关信息。