有没有像'catch all'JavaScript错误处理程序那样的东西?

时间:2012-03-20 02:08:01

标签: javascript

我发现使用异步回调我需要为每个回调函数编写一个try / catch。似乎有点容易出错是否有一种方法或技术,我可以实现一个顶级的try / catch捕获一切?如果不是我使用的技术被认为是良好的做法,还是有更好的方法来做事?

3 个答案:

答案 0 :(得分:1)

不,不要全力以赴,这几乎总会导致问题(因为你无法很好地区分异常)。

答案 1 :(得分:1)

有两种方法可以做到这一点:

  1. 设置window's onerror attribute
    • 使用三个参数(message,url,lineNumber)调用
    • 返回true(!)可以防止默认错误处理(使其成为一个全能型)
  2. error添加window事件监听器
    • 使用错误事件e作为其唯一参数调用
    • 调用e.preventDefault()可防止默认错误处理
  3.   

    如果不是我使用的技术被认为是良好的做法,还是有更好的方法来做事?

    由于JavaScript的动态特性,try/catch非常慢。几乎总有更好的方法,例如:在调用方法之前检查是否存在某些东西。

    // bad
    try {
        document.getElementById('foo').focus();
    } catch(e) {
        alert('foo not found');
    }
    
    //good
    var el = document.getElementById('foo');
    if (el) {
        el.focus();
    } else {
        alert('foo not found');
    }
    

    根据您的具体情况,请显示您的部分代码;也许在一个单独的问题中。

答案 2 :(得分:0)

依赖全局捕获可能不是一个好主意,但是拥有一个并不是一个坏主意(在你可能没想到的情况下抛出错误的情况)。这样您就可以按照自己的方式处理未捕获的错误。

使用jQuery:

$(window).error(function (msg, url, line) {

     //do something
});