【JavaScript】例外処理とは?try…catch…finally文・throw文
おはようございます。タカヒデです。
本日は、「JavaScriptにおける、『例外処理』及び、『try…catch…finally文』『throw文』」を紹介します。
- JavaScriptにおける『例外処理』が理解できない
- 『try…catch…finally文』『throw文』の記載方法を知りたい
ぜひ本記事を参考にしてください。
例外・例外処理とは?
そもそも、例外・例外処理とは何のことでしょうか?
- 例外
- 開発時に想定しなかったエラーのこと
- 例外処理
- 例外が発生した際に、コード全体が停止しないように適切なエラー画面を表示すること。
これらのことを指します。
うーん、よくわかりませんね。
少し具体例を見ていきましょう。
例外には以下のようなものがあります。
- 電話番号の入力フォームに文字が入力された
- 注文画面の必須項目を入力しないで送信しようとした
- 変数を参照しようとしたら定義されていなかった
このような、普段は行わない操作を「例外」と言います。
発生する可能性のある例外に備えて、あらかじめ「例外処理」を実装しておくことでコード全体が止まらないようにする必要があります。
例外処理の実装(try…catch…finally文)
実際に『例外処理を実装』する場合には、『try…catch…finally文』を使用します。
『try…catch…finally文』の記載方法は以下の通りです。
// try...catch...finally文の記載方法
try{
例外が発生するかもしれない命令
}catch(例外情報を受け取る変数){
例外が発生した際に実行する命令
}finally{
例外の有無にかかわらず実行される命令
}
『finally』は必ずしも記載する必要はなく、『try…catch』のみでも問題ありません。
例外が発生しない場合は、『catch』をスキップし、『try』⇒『finally』の順で実行されます。
例外が発生した場合には、『try』でコードが停止することなく、『catch』⇒『finally』の順で実行されます。
実際の記載例を見て、「例外処理を記載しなかった場合」と「例外処理を記載した場合」を比べてみましょう。
■例外処理を記載しなかった場合
let i = 1;
i = i + j;
//実行結果:Uncaught ReferenceError: j is not defined■例外処理を記載した場合
let i = 1;
try {
i = i + j;
} catch (e) {
console.log(e.name + ":" + e.message);
} finally {
console.log("処理完了");
}
//実行結果:ReferenceError:j is not defined
//実行結果:処理完了例外処理を記載しなかった場合は、エラーでコード全体が停止されます。
一方、例外処理を記載した場合は、エラーをスキップし、『catch』『finally』の処理を実行していることが分かります。
自分で例外を発生させる(throw文)
『システム上で例外が発生した箇所ではなく、意図した箇所で例外を発生させる』場合には、『throw文』を使用します。
// throw文の記載方法
try{
throw new Error(エラーメッセージ)
}catch(例外情報を受け取る変数){
例外が発生した際に実行する命令
}
上記記載方法のtry内にある『throw new Error(エラーメッセージ)』が該当します。
以下は記載例です。
let x = 1;
let y = 0;
try {
if (y === 0) {
throw new Error("0はNG");
}
let z = x / y;
console.log(z);
} catch (e) {
console.log(e.message);
}
//実行結果:0はNG本来、JavaScriptにおいて、1÷0を実行した場合「Infinity」となります。
しかし、ここではthrowによる例外を発生させているため、Errorオブジェクトを生成し、catchの処理に移行しているため、「Infinity」にはならないのです。
これが『throw文』の処理でした。
まとめ
以上が「JavaScriptにおける、『例外処理』及び、『try…catch…finally文』『throw文』」の紹介でした。
- 例外とは、開発時に想定しなかったエラーのこと
- 例外処理とは、例外が発生した際に、コード全体が停止しないように適切なエラー画面を表示すること
- 例外処理においては、『try…catch…finally文』『throw文』を使用する
この記事が誰かの参考になれば幸いです。
お疲れさまでした。
