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

addmethrowは定義されていないため、ステートメントに到達することはありません。(具体的には、を呼び出すと、 ではなくaReferenceErrorが最初にスローされます)addmeaddMe

覚えておくべき重要なことは、プログラムはトップダウンで読み取られるということです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 に答える