为什么 00.0 会导致语法错误?

Why does 00.0 cause a syntax error?

这很奇怪。这是 JavaScript 控制台在 Chrome(版本 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 解析数字的方式可能有一些技术解释,也许只有在修改控制台提示时才会发生,但它似乎仍然是错误的。

为什么要这样做?

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

任何其他对象都会出现同样的错误:

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

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

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

  • 0.0 被解析为数字文字 1
  • 00.0 解析为:
    • 00 – 八进制数字文字 2
    • . – 属性 存取器
    • 0 – 标识符名称

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

00.toString

1 Section 7.8.3 – 前导 0 后面可以跟 小数分隔符指数部分
2 Section B.1.1 – 前导 0 后面可以跟 OctalDigits