0

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

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

4

2 回答 2

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()); 
     // ...
   }
}
于 2010-12-29T14:16:08.673 回答
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 扩展那么漂亮,但它做的事情大致相同。

请注意,以上是您原件的相当直译。异常不必是字符串,因此如果它们将成为更有趣的异常,您可以做比 switch 更有趣的事情:

try {
    throw new MyNiftyException(...);
}
catch (e) {
    if (e instanceof MyNiftyException) {
        // Do something related to that
    }
    // etc
}
于 2010-12-29T14:16:42.063 回答