javascript – 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中,这段代码不会编译,任何建议或解决除了显而易见的事情.
解决方法:
据我所知,其他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);
}
}
标签:javascript,exception,v8,spidermonkey 来源: https://codeday.me/bug/20190827/1737851.html