你如何根据宝座价值做事?

时间:2010-12-29 14:13:21

标签: javascript try-catch catch-block

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)  
}  

我怎样才能做一个适用于所有浏览器的类似事情?

2 个答案:

答案 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
}