Javascript 使用window.onerror和try catch块处理错误之间的差异

Javascript 使用window.onerror和try catch块处理错误之间的差异,javascript,Javascript,我正在考虑使用window.onerrorvs.try{…}catch(e){…}块处理JavaScript运行时错误 国家: 请注意,某些/许多错误事件不会触发window.onerror,您必须专门侦听它们 似乎window.onerror和try{…}catch(e){…}都可以处理引用错误: 此外,两者都无法处理SyntaxError: 除了使用window.onerror处理错误与使用like处理错误之间的明显区别之外,try-catch允许我们优雅地处理错误,重新抛出错误等,而win

我正在考虑使用
window.onerror
vs.
try{…}catch(e){…}
块处理JavaScript运行时错误

国家:

请注意,某些/许多错误事件不会触发window.onerror,您必须专门侦听它们

似乎
window.onerror
try{…}catch(e){…}
都可以处理引用错误:

此外,两者都无法处理SyntaxError:


除了使用
window.onerror
处理错误与使用like处理错误之间的明显区别之外,try-catch允许我们优雅地处理错误,重新抛出错误等,而window.onerror函数不这样做,等等。这两种处理错误的方法之间还有什么区别?是否有任何错误可以用
window.onerror
处理,但不能用
try{…}catch(e){…}
处理?反之亦然?

是-window.onerror可以检测由浏览器工作流引起的错误-try/catch仅在执行的js代码的有限部分上运行。window.onerror可能会检测到插件问题或因代码不严格而导致的任何错误(像jQ这样的库、像YT API这样的API等)-例如:您不能将外部库支持的异步代码放在try中(不修改外部代码),您不能将html标记完成的脚本加载放在try中(由浏览器管理)-window.onerror将在脚本文件损坏且无法加载到标记时触发-window.onerror抛出的错误远远超过catch所能支持的数量-它还包含有关文件和行的信息。缺点是window.onerror只提供信息-代码被中断,使用try/catch可以提供回退行为并允许代码处理这种情况-即使有错误

您可以使用try/catch来捕获语法错误,但只有在计算代码表单字符串时:

try{
  eval('(function(){asdhaowd;;;;asd;!!!@#!@$lolzolololol]]]]]]]})()');
} catch(e){
  do sth();
}
它将捕获eval错误(意外的']'或之前的内容) 我在我的网站上使用它来检测用户上传的受损代码。
window.onerror仅用于调试-当try-can

window.onerror类似于全局try/catch块时,它无法防止代码崩溃。使用try/catch以您知道可能会出错的特定块为目标


window.onerror是一般情况。我注意到的一点是,您分配给window.onerror处理错误的函数,应该在调用它的代码上方定义,否则可能会出现函数未定义的错误。

如果您正在尝试-您可能预期会发生错误-window.onerror可用于跟踪代码中的意外错误-例如,您可以绑定函数将错误报告发送到邮件