try .. catch
try .. catch で例外を捕捉します。
- throwで例外をスローし、メソッドを脱出します。try .. catchでそれを捕捉します。
- throwの引数には任意のオブジェクトを指定できます。
- catchの引数として、スローされたオブジェクトが渡されます。
var stdout = document.getElementById("stdout"); // 例外を使う try { throw "test"; // throwで例外をスロー。javaと違って引数として任意のオブジェクトを指定できる。 stdout.innerHTML += "fail"; // ここにはこない。 } catch ( arg ) { // catch で例外を補足する。 引数でスローしたオブジェクトが渡される。 stdout.innerHTML += typeof arg + ":" + arg + "<br/>"; } finally { stdout.innerHTML += "fainally<br/>"; // 例外発生の有無にかかわらず必ず実行される。 }
参考:Core JavaScript 1.5 Guide:Exception Handling Statements
↑を見るとcatchに条件文を書くことで、実行するcatchブロックを振り分けることができるとなっていますが、IE6では動作しませんでした。(Firefox2では動く)
// catch での条件指定 // 引数に続けて条件を記載することで、実行するcatchブロックを振り分けることができる。 try { throw "test"; stdout.innerHTML += "fail"; } catch ( e if e == "foo" ) { stdout.innerHTML += "foo :" + e + "<br/>"; // パラメータが条件にマッチしないので実行されない。 } catch ( e if e == "test" ) { stdout.innerHTML += "test-1:" + e + "<br/>"; // 条件にマッチするので実行される。 } catch ( e if e == "test" ) { stdout.innerHTML += "test-2:" + e + "<br/>"; // 上の条件にマッチして処理されるため、こちらは実行されない。 }