JavaScript

try~catch~finally 文

 編集:2022.08.23 by T.A.

JavaScriptのエラー処理機能を実装する。

try{
 文1
}[catch(変数){
 文2
}][finally{
 文3
}]
文1 エラー発生の可能性がある文。
文2 エラー処理の文。
変数 初期値では、エラー発生時のErrorオブジェクト、tryブロックで投げられた値が代入される。

例外が try ブロックの中で投げられたときは、たとえば、catch (e) における e が例外の値を保持します。この識別子を使用して、発生した例外についての情報を取得することができます。この識別子は catch ブロックのスコープでのみ利用できます。

例外の値が必要ない場合にはこれは省略できます。

文3 必ず最後に通る文。ここの文は、例外の発生に関わらず実行されます。

このような処理形態がある:

無条件の catch ブロック

catch ブロックが使われている場合、try ブロックの中から任意の例外が発生すると、catch ブロックが実行されます。例えば、以下のコードで例外が発生すると、制御は catch ブロックへ移動します。

//コンソールにて
try {
  throw 'myException'; // 例外を生成
} catch (e) {
  // 任意の例外を操作するための文
  logMyErrors(e); // エラーハンドラーに例外オブジェクトを渡します
}

catch ブロックは例外の値を保持する識別子(上記の例では e)を指定します。この値は catch ブロックのスコープ内でのみ利用できます。

条件付き 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 ブロックの中だけで有効。
関連

throwinstanceof

メモ

A=0/3」をしても結果は 0 となり、エラーにはならなかった。
A=3/0」をしても結果は Infinity(無限大)となり、エラーにはならなかった。


テスト