→
JavaScriptのエラー処理機能を実装する。
| 文1 | エラー発生の可能性がある文。 |
|---|---|
| 文2 | エラー処理の文。 |
| 変数 | 初期値では、エラー発生時のErrorオブジェクト、tryブロックで投げられた値が代入される。
例外が try ブロックの中で投げられたときは、たとえば、catch (e) における e が例外の値を保持します。この識別子を使用して、発生した例外についての情報を取得することができます。この識別子は catch ブロックのスコープでのみ利用できます。 例外の値が必要ない場合にはこれは省略できます。 |
| 文3 | 必ず最後に通る文。ここの文は、例外の発生に関わらず実行されます。 |
このような処理形態がある:
catch ブロックが使われている場合、try ブロックの中から任意の例外が発生すると、catch ブロックが実行されます。例えば、以下のコードで例外が発生すると、制御は catch ブロックへ移動します。
//コンソールにて
try {
throw 'myException'; // 例外を生成
} catch (e) {
// 任意の例外を操作するための文
logMyErrors(e); // エラーハンドラーに例外オブジェクトを渡します
}
catch ブロックは例外の値を保持する識別子(上記の例では e)を指定します。この値は catch ブロックのスコープ内でのみ利用できます。
「条件付き catch ブロック」は、下記のように try...catch ブロックを if...else if...else 構造と組み合わせることで作成することができます。
//コンソールにて
try{
myroutine(); // 3 つの例外が発生する可能性があります
}catch(e){
if(e instanceof TypeError){
// TypeError 例外を処理するための文
}else if(e instanceof RangeError){
// RangeError 例外を処理するための文
}else if(e instanceof EvalError){
// EvalError 例外を処理するための文
}else{
// 任意の指定されていない例外を操作するための文
logMyErrors(e); // エラーハンドラーに例外オブジェクトを渡す
}
}
A=prompt("任意のJavaScriptコードを記述してください:", "window=");
try{
D=eval(A);
}catch(e){
alert("エラー発生:"+e.message);
E=e;
}
D=e; //エラー発生。e は catch ブロックの中だけで有効。
「A=0/3」をしても結果は 0 となり、エラーにはならなかった。
「A=3/0」をしても結果は Infinity(無限大)となり、エラーにはならなかった。