我有以下代码,但不使用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);
}
Run Code Online (Sandbox Code Playgroud)
代码 - 这不起作用
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");
}
}
Run Code Online (Sandbox Code Playgroud)
addme是未定义的,所以你永远不会达到你的throw陈述.(具体来说,ReferenceError当你打电话时,首先抛出a 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");
}
Run Code Online (Sandbox Code Playgroud)
要处理任何类型的错误,您可以检查err instanceof TYPE_OF_ERROR:
catch(err) {
if(err instanceof ReferenceError) {
document.write("This is a custom message for ReferenceErrors");
}
}
Run Code Online (Sandbox Code Playgroud)
(请记住,字符串不是错误)
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |