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の拡張機能ほどきれいではありませんが、ほとんど同じことをします。

上記はあなたのオリジナルのかなり直訳であることに注意してください。例外は文字列である必要はないので、より興味深い例外になる場合は、スイッチよりも興味深いことを行うことができます。

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