为什么 false++ 在 Firefox 中产生 SyntaxError 而在 Chrome 中产生 ReferenceError?

Why does false++ produce a SyntaxError in Firefox but a ReferenceError in Chrome?

在尝试调试 JavaScript 的某些错误片段时,我发现源文件中有一行看起来像是明显的错误:

false++;

我不明白的是为什么这个语句在所有浏览器中的行为都不同。

是否允许不同的浏览器以不同的方式处理相同的损坏JavaScript?

我知道错误是什么以及如何修复它,但至少错误类型不应该由规范规定吗?

Chrome 似乎是最新的。

  • ES6 and ES7 a ReferenceError is thrown when trying to assign to a primary expression 中是文字(例如 false)而不是标识符。
  • ES5 an early error (which usually are SyntaxErrors) of unspecified type is thrown for assignments "on any value for which an early determination can be made that the value is not a Reference", though if it would happen 中会抛出 ReferenceError,所以有人可能会争辩说早期错误也应该是那种类型。
  • 在 ES3 中,错误条件的描述与 ES5 类似,但它只声明“一个实现可以 [原文如此!] 处理任何实例以下类型的运行时错误作为语法错误和 所以早点报告".
  • 在 ES1 和 ES2 中,没有错误类型,也根本没有异常处理,分配给不仅仅是引用的东西据说是“生成运行时错误” .但是,允许实现在编译时尽早报告它们,前提是它们可以证明错误会在任何情况下发生。

虽然 Firefox 中的错误处理可能被 ES5 或 ES3 措辞所原谅,但 Internet Explorer 抛出运行时的行为 SyntaxError 与这些都不匹配。但是,Microsoft 计划 fix this in Chakra. For further discussion, see https://github.com/tc39/ecma262/issues/257 and https://github.com/tc39/ecma262/issues/691.

只是一个猜测,但也许 Firefox 首先检查语法错误,& Chrome 首先检查引用错误。第一个错误被抛出,& 不再继续。报错的主要原因是false是Boolean,不是Integer或numeric值,所以不能自增或自减。在没有看到源代码的情况下,我会尝试将 false 更改为 var falseCount.