在某些 Javascript 代码中存在错误,小数点 0.04 被声明为 0.0.4,如下所示:
var x = 0.0.4;
当它在 Firefox 中运行时,给出的错误是:
SyntaxError: missing ; before statement
IE 声明:
Expected ';'
Chrome 声明:
Uncaught SyntaxError: Unexpected number
我知道 0.0.4 不是数字或文字,但 Javascript 如何试图解释该语句?为什么它认为缺少 ; ?
最佳答案
Chrome
Chrome 将赋值的第一部分视为 float 0.0
,您希望访问键 0
处的属性,这在 JavaScript 中是不允许的 (您不能使用点符号来引用数字键)。换句话说,您可以将作业拆分为以下等价物:
var x = 0.0
x.0 // Throws unexpected number
相比之下,这是有效的:
var x = 0.0.toString()
在我看来,这是最合乎逻辑的解析器实现,其中的错误最有意义。
火狐
Firefox 将赋值的第一部分视为 float 0.0
,但对 .0
部分感到困惑 - 它不将此识别为属性访问而是认为您想开始一个新语句(.4
,它是 0.4
的简写) - 因此它告诉您您错过了一个分号,该分号用于终止声明。
当您使用有效的属性访问器(字符串)时,它仍然可以正确解释语句:
var x = 0.0.toString()
有点相关的也是this SO question其中讨论了类似的行为。
关于javascript - Javascript 是如何试图解释这个非法语句的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30664989/