3

SpiderMonkey を使用すると、条件付きの catch ブロックを利用して、例外を適切なハンドラーにルーティングできます。

try {
// function could throw three exceptions
getCustInfo("Lee", 1234, "lee@netscape.com")
}
catch (e if e == "InvalidNameException") {
// call handler for invalid names
bad_name_handler(e)
}
catch (e if e == "InvalidIdException") {
// call handler for invalid ids
bad_id_handler(e)
}
catch (e if e == "InvalidEmailException") {
// call handler for invalid email addresses
bad_email_handler(e)
}
catch (e){
// don't know what to do, but log it
logError(e)
}

MDN の例

ただし、V8 では、このコードはコンパイル、提案、または明らかな以外の回避策はありません。

4

1 に答える 1

6

私の知る限り、他の JavaScript エンジンには同様の機能はありません。

ただし、この機能を使用してコードを変換するのは簡単です。

try {
    A
} catch (e if B) {
    C
}

すべての JavaScript エンジンがサポートする標準機能のみを使用するコードに変換します。

try {
    A
} catch (e) {
    if (B) {
        C
    } else {
        throw e;
    }
}

あなたが与えた例は、翻訳するのがさらに簡単です:

try {
    getCustInfo("Lee", 1234, "lee@netscape.com");
} catch (e) {
    if (e == "InvalidNameException") {
        bad_name_handler(e);
    } else if (e == "InvalidIdException") {
        bad_id_handler(e);
    } else if (e == "InvalidEmailException") {
        bad_email_handler(e);
    } else {
        logError(e);
    }
}
于 2011-01-08T18:42:52.737 に答える