1

我有以下代码可以在不使用 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");
        }
    }
4

1 回答 1

4

addme是未定义的,所以你永远不会达到你的throw陈述。(具体来说,ReferenceError调用时首先抛出aaddme而不是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");
    }
}

(请记住,字符串不是错误

于 2012-06-29T02:52:25.427 回答