【问题标题】:javascript try catch not fully working in firefoxjavascript try catch 在 Firefox 中不能完全工作
【发布时间】:2014-03-29 00:45:39
【问题描述】:

谁能解释一下为什么会这样:

<html>
<head></head>
<body>
    <script>
        try {
            document.attribute-withminus = 5;
        }
        catch(e) {
            alert('something went wrong');
        }

        alert('ok');
    </script>
</body>
</html>

不给我“出了点问题”的警报,也没有给我“好的”警报?

它在 chrome 中运行良好。但在 Firefox 中,它只是退出(它确实在 Web 控制台中显示错误)。 try-catch 的全部目的是确保如果我输入错误,它应该给我一个警告说这样说。我不想让 Web 控制台一直打开。

另外,我知道这里出了什么问题(减号登录属性;应该使用 setAttribute)。我在问为什么我的错误没有被发现。

【问题讨论】:

  • 我遇到了同样的问题。我使用 try..catch 来解决我正在使用的某个 JS 库的已知问题。该解决方法在 IE 和 Chrome 中是完美的,但在 Firefox 中则不是。在 Firefox 中不会捕获异常,这意味着错误下面的后续代码不会执行。这是一个问题。至于这里关于语法与早期错误的 cmets——它们都是错误,我希望 try..catch 能把它们捡起来。

标签: javascript firefox try-catch


【解决方案1】:
document.attribute-withminus = 5;

是一个 语法 错误(可能类似于 "invalid left hand part in assignment")这是一个 early error,而不是 运行时 错误。

浏览器不应该执行包含它的脚本,它应该在编译包含错误的代码后立即停止并报告错误,然后再进行任何评估。在大多数浏览器中,脚本会在到达try 子句之前被完全编译。它可以在 Chrome 中运行,因为 Chrome 会延迟编译,直到它需要内部块。

【讨论】:

  • 是的,这是 V8 中长期存在的错误。见code.google.com/p/v8/issues/detail?id=1714
  • 这不是后期编译的问题,也不是编译的问题。 V8 将针对其他语法问题抛出早期错误;他们只是碰巧没有检查这个。其他浏览器执行类似的简单语法传递,但 do 根据规范要求检查这种情况。而且规格一点也不含糊。它清楚地表明这种情况是一个早期错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多