例外処理とは
通常、エラーが起こるとプログラムは強制終了します。
例外処理を行うことでエラーが起きたとき、プログラムを終了せずに、エラーを適切に処理してプログラムの実行を継続できます。
通常、エラーが起こるとプログラムは強制終了します。
例外処理を行うことでエラーが起きたとき、プログラムを終了せずに、エラーを適切に処理してプログラムの実行を継続できます。
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(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 です。
処理が終了しました。