为什么 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.0
和 00.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
这很奇怪。这是 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.0
和 00.0
的解析方式不同。
0.0
被解析为数字文字 100.0
解析为:00
– 八进制数字文字 2.
– 属性 存取器0
– 标识符名称
您的代码抛出语法错误,因为 0
不是有效的 JavaScript 标识符。以下示例有效,因为 toString
是有效标识符:
00.toString
1 Section 7.8.3 – 前导 0 后面可以跟 小数分隔符 或 指数部分
2 Section B.1.1 – 前导 0 后面可以跟 OctalDigits