在尝试调试一些错误的 JavaScript 片段时,我在源文件中发现了一行看起来很明显的错误:
false++;
我不明白的是为什么这个语句在所有浏览器中的行为都不同。
- 在 Chrome 中,我收到 ReferenceError 并且整个脚本没有运行。
- 在 Firefox 中,我得到一个 SyntaxError 并且整个脚本没有运行。
- 在 Internet Explorer 中,我得到一个 SyntaxError,脚本只运行到发生错误的那一行。
是否允许不同的浏览器以不同的方式处理相同的损坏的 JavaScript?
我知道错误是什么以及如何修复它,但至少错误类型不应该由规范规定吗?
最佳答案
Chrome 似乎是最新的。
- 在ES6和 ES7尝试 assign to a primary expression 时抛出
ReferenceError
这是文字(例如false
)而不是标识符。 - 在ES5一个未指定类型的早期错误(通常是
SyntaxError
s)被抛出用于赋值“任何值,可以早期确定该值不是 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/257和 https://github.com/tc39/ecma262/issues/691 .
关于javascript - 为什么 false++ 在 Firefox 中产生 SyntaxError 而在 Chrome 中产生 ReferenceError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39488297/