Javascript中的以下try、throw和catch异常处理程序有什么错?
下面的代码不使用throw,但是当我使用throw关键字时,它不会返回相应的消息。我做错了什么 更新 我故意调用函数Javascript中的以下try、throw和catch异常处理程序有什么错?,javascript,Javascript,下面的代码不使用throw,但是当我使用throw关键字时,它不会返回相应的消息。我做错了什么 更新 我故意调用函数addme,而不是addme,因为我想捕捉错误消息 代码-不使用抛出 function addMe() { var a = 1; var b = 2; return a+b; } try { addme(); } catch (err) { document.wri
addme
,而不是addme
,因为我想捕捉错误消息
代码-不使用抛出
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
语句。(具体地说,当您调用addme
而不是addme
时,首先抛出a)
要记住的关键是,程序是自上而下读取的,直到您注入一个发送到其他地方的GOTO
(错误、调用函数、从函数返回等)。一旦调用,该行下面的行就不能保证被调用
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");
}
要处理任何类型的错误,您可以检查错误类型的错误实例:
catch(err) {
if(err instanceof ReferenceError) {
document.write("This is a custom message for ReferenceErrors");
}
}
(请记住,)
addme
是未定义的,因此您永远无法到达throw
语句。(具体地说,当您调用addme
而不是addme
时,首先抛出a)
要记住的关键是,程序是自上而下读取的,直到您注入一个发送到其他地方的GOTO
(错误、调用函数、从函数返回等)。一旦调用,该行下面的行就不能保证被调用
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");
}
要处理任何类型的错误,您可以检查错误类型的错误实例:
catch(err) {
if(err instanceof ReferenceError) {
document.write("This is a custom message for ReferenceErrors");
}
}
(请记住,)我看到两个打字错误。你的函数名是
addMe
,但是当你调用它时,你调用addMe
(没有大写字母M)。另外,您抛出error 1
(带空格)并检查它是否等于error 1
(无空格)@jackwanders-很抱歉,我在error
和1
之间修改了我的帖子。我故意调用函数addme
,而不是addme
,因为我想捕获错误。如果这样做,捕获的错误将不是“错误1”,而是ReferenceError:addme未定义
。您的throw
语句并不意味着“如果出现任何错误,抛出此消息”,而是意味着“如果您到达这行代码,抛出此错误”。您的代码永远不会到达throw
语句,因为调用未定义函数会引发不同的错误first@jackwanders-这是有道理的。我所阅读的示例没有明确说明使用throw
并不意味着“显示此错误消息”。我不太明白你所说的“如果你达到这行代码,抛出这个错误”的意思。我看到两个打字错误。你的函数名是addMe
,但是当你调用它时,你调用addMe
(没有大写字母M)。另外,您抛出error 1
(带空格)并检查它是否等于error 1
(无空格)@jackwanders-很抱歉,我在error
和1
之间修改了我的帖子。我故意调用函数addme
,而不是addme
,因为我想捕获错误。如果这样做,捕获的错误将不是“错误1”,而是ReferenceError:addme未定义
。您的throw
语句并不意味着“如果出现任何错误,抛出此消息”,而是意味着“如果您到达这行代码,抛出此错误”。您的代码永远不会到达throw
语句,因为调用未定义函数会引发不同的错误first@jackwanders-这是有道理的。我所阅读的示例没有明确说明使用throw
并不意味着“显示此错误消息”。我不太明白你所说的“如果你达到这行代码,抛出这个错误”的意思,我已经修改了我的问题。我有意调用函数addme
,因为我想捕捉错误,然后显示自定义消息,而不是ReferenceError
你能详细解释一下“所以你永远不会到达你的抛出语句”是什么意思吗?你什么时候能到达throw
?@PeanutsMonkey-我给了它一个机会-让我知道它是否有用。这很有帮助,但我不太清楚何时能到达throw
。@PeanutsMonkey-永远不会到达-这就是问题所在-JavaScript解释器读取第一行:try
。成功了。然后它读第2行:addme
。它找不到addme
的任何定义,因此它停止逐行读取,并检查它是否在try
块中。是的,因此它转到catch
块(第6行),并将在第2行创建的错误传递给它。这有意义吗?我修正了我的问题。我有意调用函数addme
,因为我想捕捉错误,然后显示自定义消息,而不是ReferenceError
你能详细解释一下“所以你永远不会到达你的抛出语句”是什么意思吗?你什么时候能到达throw
?@PeanutsMonkey-我给了它一个机会-让我知道它是否有用。这很有帮助,但我不太清楚何时能到达throw
。@PeanutsMonkey-永远不会到达-这就是问题所在-JavaScript解释器读取第一行:try
。成功了。然后它读第2行:addme
。它找不到addme
的任何定义,因此它停止逐行读取,并检查它是否在try
块中。是的,因此它转到catch
块(第6行),并将在第2行创建的错误传递给它。这有意义吗?