JavaScriptのエラーハンドリングについて
JavaScriptは動的型付け言語であり、コンパイル時のエラーは発生しません。
そのため、undefinedの変数にアクセスしたり、undefinedの関数を呼び出したりすると、実行時エラーが発生することがあります。
JavaScriptでは、JavaやC#といった他の言語と同様に、try-catch-finallyブロックを用いて実行時のエラーをキャッチするエラー処理機構を備えています。
JavaScriptにおける、基本的なエラーハンドリングの書き方は以下の通りです。
try {
// エラーが発生するコード
} catch (ex) {
// エラー発生時に実行されるコード
} finally {
// エラーが発生してもしなくても実行されるコード
}
それぞれの役割を見ていきましょう。
- try: エラーを投げる可能性のある疑わしいコードをtryブロックで囲む。
- catch: エラーが発生したときに何かするコードをcatchブロックに記述する。catchブロックには、エラー情報を与えるパラメータを指定することができる。一般にcatchブロックは、エラーのログを取ったり、ユーザーに特定のメッセージを表示するために使われます。
- finally: エラーの発生に関係なく、finallyブロックのコードは常に実行されます。finallyブロックは、残りのタスクを完了させたり、tryブロックでエラーが発生する前に変更された可能性のある変数をリセットするために使用されます。
エラーハンドリングを使用したコード例
try {
let result = Sum(10, 20); // 未定義の関数を使用する
} catch(err) {
console.log(err)
}
上記の例では、まだ定義されていない関数Sumを呼び出しています。そのため、tryブロックはエラーを投げ、catchブロックによって処理されます。
errには、表示可能なエラーメッセージが含まれています。
finallyブロックは何が起ころうとも実行されます。
try {
var result = Sum(10, 20); // Sum is not defined yet
}
catch(err) {
console.log(err)
} finally {
console.log("finallyです")
}
throwでカスタムエラーを発生させる
throw キーワードは、カスタム・エラーを発生させるために使用します。
try {
throw "Error occurred";
} catch(err) {
console.log(err);
}
エラーの詳細については、JavaScriptオブジェクトを使用することができます。
try
{
throw {
number: 404,
message: "not found"
};
}
catch (err) {
alert(err.number + "- " + err.message);
}