MDC说这样做,但也说他们认为这只是FireFox扩展:
实时代码:http://jsfiddle.net/vQsUX/
try {
throw("InvalidNameException");
}
catch (e if e == "InvalidNameException") {
document.write(e)
}
catch (e if e == "InvalidIdException") {
document.write(e)
}
catch (e if e == "InvalidEmailException") {
document.write(e)
}
我怎样才能做一个适用于所有浏览器的类似事情?
答案 0 :(得分:2)
抓住对象并在单个catch
块中对其进行评估:
try {
// stuff
}
catch (exc) {
if (exc === "InvalidNameException") {
// do something
}
else if (exc === "whatever") {
// do something else
}
}
由于异常只是对象,并且你可以throw
任何你喜欢的东西,你总是可以开发自己更精细的异常结构。异常对象可以包含要运行的代码,数字键,无论您需要什么。也就是说,我从未在Javascript中找到过多精心设计的异常机制;它似乎没有出现太多。尽管如此:
function riskyCodeHere() {
// scary dangerous things
if (badThings()) {
throw {
key: 207,
badnessLevel: "terrible",
toString: function() {
return "Things have gotten " + this.badnessLevel;
}
};
}
}
// ...
try {
riskyCodeHere();
}
catch (b) {
switch (b.key) {
case 207: console.log(b.toString());
// ...
}
}
答案 1 :(得分:0)
您可以使用switch
声明执行此操作:
try {
throw("InvalidNameException");
}
catch (e) {
switch (e.toString()) {
case "InvalidNameException":
document.write(e);
break;
case "InvalidIdException":
document.write(e);
break;
case "InvalidEmailException":
document.write(e);
break;
}
}
它不如Firefox扩展程序那么漂亮,但它的功能大致相同。
请注意,以上内容是您原文的相当直译。例外情况不一定是字符串,所以如果它们成为更有趣的例外情况,你可以做一些有趣的事情而不是转换:
try {
throw new MyNiftyException(...);
}
catch (e) {
if (e instanceof MyNiftyException) {
// Do something related to that
}
// etc
}