任何javascript运行时(浏览器,节点等)是否会抛出无法捕获的异常?是否在javascript环境中遇到的任何和所有异常都可以在try / catch语句中捕获?
答案 0 :(得分:18)
如果通过 exceptions 表示任何破坏脚本的异常情况,那么所有异常都会抛出无法捕获的异常,因为大多数语法错误都无法捕获。只能捕获动态评估代码(eval
,new Function
)中的语法错误。
try { :( } catch(e) { } // uncatchable syntax error
假设您的意思是使用try..catch
进行捕获。从技术上讲,您可以使用error
事件来捕获来自其他脚本块的语法错误:
<script> onerror = function (e) { return true; }; </script>
<script> :( </script>
另一方面,也许您不认为在评估之前发生的错误是例外。在这种情况下,“无法捕获的异常”可能会降级为来自其他执行上下文的异常抛出(例如使用setTimeout调用的函数),其中您无法控制抛出异常的执行上下文。当然,这些例外不会破坏您的程序流程。
答案 1 :(得分:0)
概括其他答案 - 如果没有专门为处理它们而设计的“bug guns”,那么异步的异常通常是无法处理的 - 即节点中的域和进程"uncaughtException"
事件以及{{1}在浏览器中。
获得此类错误的最简单方法是:
onerror
这是您在另一个答案示例中setTimeout(function(){
throw "Catch me if you can!";
});
中看到的内容。