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

标签 javascript syntax-error specifications referenceerror

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

false++;

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

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

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

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

最佳答案

Chrome 似乎是最新的。

  • ES6ES7尝试 assign to a primary expression 时抛出 ReferenceError这是文字(例如 false)而不是标识符。
  • ES5一个未指定类型的早期错误(通常是 SyntaxErrors)被抛出用于赋值“任何值,可以早期确定该值不是 Reference ”,虽然if it would happen将抛出 ReferenceError,因此有人可能会争辩说早期错误也应该是那种类型。
  • 在 ES3 中,错误条件的描述与 ES5 类似,但它只声明“一个实现可以 [原文如此!] 处理以下类型的运行时错误的任何实例作为语法错误和 因此尽早报告"。
  • 在 ES1 和 ES2 中,没有错误类型,也根本没有异常处理,分配给不是引用的东西被称为“生成运行时错误”。不过,如果实现可以证明错误会在任何情况下发生,则可以在编译时尽早报告它们。

虽然 Firefox 中的错误处理可能被 ES5 或 ES3 措辞所原谅,但 Internet Explorer 抛出运行时 SyntaxError 的行为与这些都不匹配。但是,微软计划fix this in Chakra .如需进一步讨论,请参阅 https://github.com/tc39/ecma262/issues/257https://github.com/tc39/ecma262/issues/691 .

关于javascript - 为什么 false++ 在 Firefox 中产生 SyntaxError 而在 Chrome 中产生 ReferenceError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39488297/

相关文章:

javascript - 为什么我的 WordPress 模板无法识别我的 JQuery 库和 CSS 文件?

javascript - 模板文字语法在 IE11 中不起作用

javascript - 删除数组中所有重复项和未定义项。 Ramda.js

haskell - 如何修复我的 Haskell 条件语句?

HTML:表格?

c# - C#程序可以以 '{'开头吗?如果没有,为什么不呢?

javascript - 是否有编程方式来清除 FilePicker?

django - 网址无效的Django 1.4导入错误语法

c - FFTW3 2D,传递 fftw_complex 数组

javascript - 这种比较行为是否定义明确?