言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

JavaScript辞典

  1. トップページ
  2. JavaScript辞典
  3. 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);
}

概要

『try...catch』はプログラムの実行中に発生するエラーを捕捉し、適切に処理するための構文です。『try』ブロック内でエラーが発生すると、通常はプログラムが停止しますが、『catch』ブロックでエラーを受け取ることで処理を継続させることができます。

『finally』ブロックはエラーの有無にかかわらず必ず実行されるため、ファイルのクローズやネットワーク接続の切断など、後片付けが必要な処理に適しています。『catch』を省略して『try...finally』だけの構文も使えますが、一般的には『catch』と『finally』の両方を記述します。

『throw』は意図的にエラーを発生させるための文で、関数の引数チェックや入力値のバリデーションなどで使用します。『try...catch』で捕捉できるのは実行時エラーのみです。構文エラーはコードの実行前に検出されるため、『try...catch』では捕捉できません。ただし『JSON.parse()』のように実行時に構文を解析する処理では、SyntaxErrorを捕捉できます。

対応ブラウザ

Chrome Chrome
49 以降
全バージョンで対応しています
Firefox Firefox
57 以降
全バージョンで対応しています
Safari Safari
18 以降
全バージョンで対応しています
Edge Edge
80 以降
11 以前 ×
IE IE
11 以降
4 以前 ×
Opera Opera
48 以降
3 以前 ×
iOS Safari iOS Safari
18 以降
全バージョンで対応しています
Android Browser Android Browser
37 以降
4 以前 ×
Chrome Android Chrome Android
36 以降
17 以前 ×
Firefox Android Firefox Android
79 以降
3 以前 ×

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。