例外処理 - Javascript

例外処理とは

通常、エラーが起こるとプログラムは強制終了します。

例外処理を行うことでエラーが起きたとき、プログラムを終了せずに、エラーを適切に処理してプログラムの実行を継続できます。

Errorオブジェクト

Javascript では、7つの例外を表す組み込みオブジェクトが定義されています。

コンストラクタ 内容
Error 汎用的な例外オブジェクト
EvalError eval関数に関して発生
RangeError 数値が有効範囲外である場合に発生
ReferenceError 不正な参照を読みだした場合に発生
SyntaxError 構文の間違いによって発生
TypeError 変数および引数の型が有効でない場合に発生
URIError encodeURI、decodeURIに不正な引数が渡された場合に発生

例外を表す組み込みオブジェクトのプロパティには、以下のようなものがあります。

let error = new TypeError("オブジェクトではありません");

console.log(error.message);
console.log(error.name);
console.log(error.toString());

// 結果
オブジェクトではありません
TypeError
TypeError: オブジェクトではありません

SyntaxError に関しては、エラーが発生すると finally を実行せずに途中でプログラムが終了します。

try / catch / finally

try / catch / finallyを使って、例外処理を行うことができます。

基本的な使い方は、以下のようになります。

try {
  // 例外が発生する可能性があるコード
} catch(exception) {
  // try ブロックで例外が発生した時に実行されるブロック
} finally {
  // 例外の発生の有無に限らず、最後に必ず実行される処理
}

以下のプログラムを実行すると、宣言されていない変数 name が呼び出されるため、ReferenceErrorが発生します。

try {
  console.log(name);
} catch(e) {
  if(e instanceof EvalError){
    console.log("EvalErrorです。");
  }

  if(e instanceof RangeError){
    console.log("RangeError です。");
  }

  if(e instanceof ReferenceError){
    console.log("ReferenceError です。");
  }

  if(e instanceof SyntaxError){
    console.log("SyntaxError です。");
  }

  if(e instanceof TypeError){
    console.log("TypeError です。");
  }

  if(e instanceof URIError){
    console.log("URIError です。");
  }
} finally {
  console.log("処理が終了しました。");
}

// 結果
ReferenceError です。
処理が終了しました。