3

这困扰了我一段时间。我在断言失败时抛出异常,但这只有在我能真正捕获异常时才有用(在这种情况下我alert是用户)。如果我无法捕捉到异常,那么

  1. 我依靠浏览器通知用户存在内部错误(浏览器可能什么都不做,所以用户永远不会发现有问题),并且
  2. 我没有看,所以不能清理。

那么,真的有一种处理 JavaScript 中断言错误的好方法吗?有什么方法可以捕获未捕获的异常吗?请注意,我对单元测试、用户错误等不感兴趣——我只关心合同编程,用户和开发人员都需要知道发生了错误。

4

1 回答 1

2

对于断言,有console.assert(). 但这只会记录消息并继续。

使用 HTML5 还可以使用window.onerror处理程序捕获未处理的异常。dev.opera 上有一篇很棒的文章,它可以用来向用户显示精美的错误消息,甚至将异常记录到服务器。

如果你不能使用它,你就会在所有东西周围都使用 try-catch 子句(尤其是“执行入口点”,如事件处理程序、超时等)。或者你可以在抛出错误之前处理它们:

function SmartError(message) {
    Error.call(this, message);
    $('<div class="error">Some problem occured, the app will stop working</div>')
        .appendTo("body");
    $.post("/log/clientside/js.php", this);
    ...
}

if (something.does(! "work"))
    throw new SmartError("mysterious problem");
于 2012-06-06T17:34:41.093 回答