Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
- トップページ
- JavaScript辞典
- try / catch / finally / throw
try / catch / finally / throw
プログラムの実行中に発生するエラーを捕捉し、適切に処理するための構文です。エラーが発生してもプログラムが停止しないよう制御できます。
構文
try {
// エラーが発生する可能性のある処理
} catch (error) {
// エラーが発生した時の処理
} finally {
// エラーの有無にかかわらず必ず実行される処理
}
// 意図的にエラーを発生させます。
throw new Error("エラーメッセージ");
構文の各部分
| 構文 | 概要 |
|---|---|
| try | エラーが発生する可能性のある処理を記述するブロックです。この中でエラーが発生すると、直後の『catch』ブロックに制御が移ります。 |
| catch (error) | 『try』ブロック内でエラーが発生した場合に実行されるブロックです。引数の『error』にはエラーオブジェクトが渡され、『error.message』でエラーメッセージを取得できます。 |
| finally | 省略可能です。エラーの有無にかかわらず必ず実行されるブロックです。リソースの後片付けなどに使用します。 |
| throw | 意図的にエラーを発生させます。入力値の検証で不正な値を検出した場合など、明示的にエラーを投げたい場面で使用します。 |
主なエラーの種類
| エラー | 概要 |
|---|---|
| Error | すべてのエラーの基本となるオブジェクトです。『throw new Error("メッセージ")』のように使用します。 |
| TypeError | 値の型が期待と異なる場合に発生します。例えば『null.length』のように、『null』や『undefined』のプロパティにアクセスした場合に発生します。 |
| ReferenceError | 存在しない変数を参照した場合に発生します。 |
| SyntaxError | 構文に誤りがある場合に発生します。『JSON.parse()』に不正なJSON文字列を渡した場合にも発生します。 |
| RangeError | 値が許容範囲外の場合に発生します。例えば配列のサイズに負の値を指定した場合に発生します。 |
サンプルコード
// 基本的なtry...catchの使い方
try {
var data = JSON.parse("不正なJSON文字列");
} catch (error) {
console.log("エラーの種類: " + error.name); // 『エラーの種類: SyntaxError』と出力されます。
console.log("メッセージ: " + error.message);
}
// finallyブロックの使い方
console.log("処理を開始します");
try {
var result = 10 / 0;
console.log("計算結果: " + result); // 『計算結果: Infinity』と出力されます。JavaScriptではゼロ除算はエラーになりません。
} catch (error) {
console.log("エラー: " + error.message);
} finally {
console.log("処理が完了しました"); // エラーの有無にかかわらず必ず実行されます。
}
// throwで意図的にエラーを発生させる例
function divide(a, b) {
if (b === 0) {
throw new Error("0で割ることはできません"); // 意図的にエラーを投げます。
}
return a / b;
}
try {
var answer = divide(10, 0);
} catch (error) {
console.log(error.message); // 『0で割ることはできません』と出力されます。
}
// TypeErrorの例
try {
var obj = null;
console.log(obj.name); // 『null』のプロパティにはアクセスできません。
} catch (error) {
console.log(error.name); // 『TypeError』と出力されます。
console.log(error.message);
}
実行結果
上記のコードを実行すると、コンソールには以下のように出力されます。
"エラーの種類: SyntaxError" "メッセージ: Unexpected token ..." "処理を開始します" "計算結果: Infinity" "処理が完了しました" "0で割ることはできません" "TypeError" "Cannot read properties of null (reading 'name')"
概要
『try...catch』はプログラムの実行中に発生するエラーを捕捉し、適切に処理するための構文です。『try』ブロック内でエラーが発生すると、通常はプログラムが停止しますが、『catch』ブロックでエラーを受け取ることで処理を継続させることができます。
『finally』ブロックはエラーの有無にかかわらず必ず実行されるため、ファイルのクローズやネットワーク接続の切断など、後片付けが必要な処理に適しています。『catch』を省略して『try...finally』だけの構文も使えますが、一般的には『catch』と『finally』の両方を記述します。
『throw』は意図的にエラーを発生させるための文で、関数の引数チェックや入力値のバリデーションなどで使用します。『try...catch』で捕捉できるのは実行時エラーのみです。構文エラーはコードの実行前に検出されるため、『try...catch』では捕捉できません。ただし『JSON.parse()』のように実行時に構文を解析する処理では、SyntaxErrorを捕捉できます。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。