V8等同于SpiderMonkey的捕获(如果是......)

时间:2011-01-08 18:34:57

标签: javascript exception v8 spidermonkey

使用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中,这段代码不会编译,任何建议,或解决明显的问题。

1 个答案:

答案 0 :(得分: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);
    }
}