我有以下代码,无需使用throw就可以工作,但是当我使用throw关键字时,它不会返回适当的消息。我究竟做错了什么?
更新资料
我要故意捕获错误消息,所以我故意调用函数addme
而不是addMe
。
代码-无需使用throw
即可工作
function addMe() {
var a = 1;
var b = 2;
return a+b;
}
try {
addme();
}
catch (err) {
document.write(err.name + " " + err.message);
}
代码-不起作用
function addMe() {
var a = 1;
var b = 2;
return a+b;
}
try {
addme();
throw "error 1";
}
catch(err) {
if(err == "error 1") {
document.write("This is a custom message for error 1");
}
}
最佳答案
addme
是未定义的,因此您永远不会到达throw
语句。 (特别是,当您调用ReferenceError
而不是addme
时,首先抛出addMe
)
要记住的关键是要从上至下读取程序,直到注入GOTO
(错误,调用函数,从函数返回等)为止,该命令会将您发送到其他地方。一旦GOTO Raptor
,该行下方的行就不能保证被调用。
try {
addme(); // Reference Error Thrown - go to catch statement
throw "error 1"; // We never get here
}
catch(err) {
// Never true - err is always a ReferenceError.
if(err == "error 1") {
document.write("This is a custom message for error 1");
}
要处理任何类型的错误,您可以检查
err instanceof TYPE_OF_ERROR
:catch(err) {
if(err instanceof ReferenceError) {
document.write("This is a custom message for ReferenceErrors");
}
}
(并且请记住,a string is not an error)