Javascript中的以下try、throw和catch异常处理程序有什么错?

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

下面的代码不使用throw,但是当我使用throw关键字时,它不会返回相应的消息。我做错了什么

更新

我故意调用函数
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行创建的错误传递给它。这有意义吗?