→
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(無限大)となり、エラーにはならなかった。