这让我有点困扰。我在断言失败时抛出异常,但这只有在我能够实际捕获异常(在这种情况下我是alert
用户)时才有用。如果我无法捕捉到异常,那么
那么,实际上有一种很好的方法来处理JavaScript中的断言错误吗?有没有办法捕捉未捕获的异常?请注意,我对单元测试,用户错误等不感兴趣 - 我只关心合同编程,用户和开发人员都需要知道存在错误。
答案 0 :(得分:2)
对于断言,有console.assert()
。但这只会记录消息并继续。
使用HTML5,还可以使用window.onerror
处理程序捕获未处理的异常。有一个excellent article on dev.opera如何用于向用户显示奇特的错误消息,甚至可以将异常记录到服务器。
如果你不能使用它,你就会在所有事情周围包装try-catch-clauses(特别是“执行入口点”,比如事件处理程序,超时和co。)。或者你可以在抛出之前处理错误:
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");