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

Lyn*_*ynn 8 javascript specifications syntax-error referenceerror

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

false++;
Run Code Online (Sandbox Code Playgroud)

我不明白的是为什么这个语句在所有浏览器中表现不同.

  • 在Chrome中,我收到了一个ReferenceError,并且没有运行整个脚本.
  • 在Firefox中,我得到一个SyntaxError,并且没有运行整个脚本.
  • 在Internet Explorer中,我收到一个SyntaxError,该脚本只运行到发生错误的行.

设计是否允许不同的浏览器以不同的方式处理相同的破解JavaScript?

我知道错误是什么以及如何解决它,但至少不应该规范的错误类型?

Ber*_*rgi 5

Chrome似乎是最新的.

  • ES6ES7一个ReferenceError试图时抛出分配给主表达式是一个文字(例如false)不是标识符.
  • ES5早期错误(其通常是SyntaxError未指定类型的多个)抛出"分配上的任何值,对于这个早期可以判定该值是不是一个参考 ",虽然如果它会发生一个ReferenceError将被抛出,从而一个可能会争辩说,早期错误也应属于那种类型.
  • 在ES3中,错误条件的描述与ES5类似,但它只声明" 实现可以 [原文如此!] 将以下类型的运行时错误的任何实例视为语法错误,因此应尽早报告 ".
  • 在ES1和ES2中,根本没有错误类型和异常处理,并且分配给不仅仅是引用的东西被称为" 生成运行时错误 ".允许实现在编译时尽早报告它们,如果它们可以证明在任何情况下都会发生错误.

虽然可以通过ES5或ES3措辞来解决Firefox中的错误处理,但是Internet Explorer抛出运行时的行为SyntaxError与这些中的任何一个都不匹配.但是,微软计划在Chakra修复此问题.有关进一步的讨论,请参阅https://github.com/tc39/ecma262/issues/257https://github.com/tc39/ecma262/issues/691.