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

Chr*_*nis 72 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
Run Code Online (Sandbox Code Playgroud)

Firefox 37.0.2也是这样,尽管它的错误信息是:

SyntaxError: missing ; before statement
Run Code Online (Sandbox Code Playgroud)

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

为什么这样做?

Sal*_*n A 76

表达式0.000.0解析方式不同.

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

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

00.toString
Run Code Online (Sandbox Code Playgroud)

1 第7.8.3节 - 前导0可以跟随小数分隔符ExponentPart
2 B.1.1节 - 前导0后面可以跟随OctalDigits

  • 请注意,00.0到07.0引发异常,但08.0和09.0完全有效,因为引擎不会将这些识别为八进制,因此将这些作为十进制数字进行填充. (18认同)

Rob*_*ann 22

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

你得到任何其他对象的相同错误:

'string'.0 // Syntax error: unexpected number
({}).0 // Syntax error: unexpected number
Run Code Online (Sandbox Code Playgroud)

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

  • 在最新的规范中,八进制文字以"0o"开头.但是,由于后向兼容性,旧的语法不太可能从浏览器实现中删除. (7认同)