javascript - Javascript 是如何试图解释这个非法语句的?

标签 javascript

在某些 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/

相关文章:

javascript - 谷歌云功能::无法使用 'require'语句

javascript - 仅使用一个没有排序功能的循环对随机数组进行排序

javascript - 如何检查音频是否正在缓冲?

javascript - mtlLoader模块 "does not provide an export named ' MTLLoader'错误

javascript - 无法从选定的 jquery 中追加和更新选项

javascript - 如何将本地文本文件上传到文本区域(网页内)

javascript - Angular - 指令的输入在按下按钮时不更新

javascript - 使用 lodash 的数组中最频繁的项

javascript - 在 if 语句中测试 redux-saga 并使用真实值

javascript - 使用动态添加的输入对数组中的每个数字进行平方