##はじめに
####学習するに至った経緯
2020年より、未経験からエンジニアへの転職を目指し、某プログラミングスクールへ通う。入学後、『Ruby』を未経験から学ぶ人が多いのと『Ruby』の求人が思っていた以上に少ないので、卒業後、フロントエンドのエンジニアを目指す事に。
Javascriptの学習した事を言語化し、認識の深化による備忘録として記載。
##「try...catch文」とは
『try...catch文』は、予想していない異常によりエラーが発生するような場面で意図的に回避するための処理。
##「try...catch文」の使い方
tryブロック内に例外エラーが発生する可能性のある処理を記述し、例外が発生した場合にはcatchブロック内の処理が実行される。 catchブロックの引数にはErrorオブジェクトが渡される。
try {
//例外エラーが発生する可能性のある処理
} catch(error) {
//例外エラーが起きた時に実行する処理
}
try {
var greeting = "こんにちは、" + name + "です。";
console.log( greeting );
} catch(e) {
console.log( e.message );
}
name is not defined
このコードを実行すると、変数nameが定義されていないという例外が発生する。通常はそこで処理が終了するが、try~catch文を記述していることでcatchブロック内の処理が実行される。Errorオブジェクトのmessageプロパティを使うとエラーメッセージを取得できる。
##throw文で例外を発生させる
throw文を使うことで、オリジナルの例外を定義することができる。
let num = "RED";
try {
if(num.search(/^[-]?[0-9]+$/) === -1){
throw new Error('変数numには整数を入れてください')
}
var like = "好きな数字は、" + num + "です。";
console.log( like );
} catch(e) {
console.error( "エラー:", e.message );
}
このコードでは、変数numに数値以外の値が入っている場合にthrow文を使って例外を発生させている。throw文で文字通りcatchブロックにErrorオブジェクトを投げている。throw文が実行されると即座にcatchブロックの処理に移る。Errorオブジェクトのコンストラクタにはエラーメッセージを持たせることも可能。
##Errorオブジェクトとは
Errorオブジェクトはエラー情報を出力する際に使われるオブジェクトで、エラーの種類によっていくつかのオブジェクトが用意されています。
オブジェクト名 | 用途 |
---|---|
Error | 一般的なエラー全般で利用 |
ReferenceError | 宣言されていない変数によるエラー |
SyntaxError | プログラムの文法エラー |
TypeError | 想定された値と異なるデータ型によるエラー |
RangeError | 想定された許容範囲を超えた値によるエラー |
URIError | 不正なURIが指定されたことによるエラー |
EvalError | 不正なeval関数が実行されたエラー |
throw文などで例外の種類によってオブジェクトを使い分けると、どのようなエラーが起こったかがわかりやすくなりデバッグにも便利。 |
##finally文で例外発生後の処理を記述する
『try~catch文』では、例外が発生した場合には即座にcatchブロックの例外処理に移るため、例外発生個所以降の通常処理は実行されない。例えば、メモリの開放処理やデータベースのコネクション解除処理などといった、例外の発生の有無にかかわらず必ず実行させたい処理がある場合にはfinally文を使用する。
try {
//例外が発生した場合の処理
} catch (e) {
//例外が発生した場合の処理
} finally {
//必ず実行される処理
}
finallyブロック内に記述した処理は例外発生の有無にかかわらず必ず実行される。
##参考サイト
[【3分でJavaScript講座】try catch文]
(https://www.youtube.com/watch?v=I367V10JSsY&t=5s)
[JavaScriptのtry~catch文で例外処理をする方法]
(https://techplay.jp/column/629)
[【JavaScript入門】try…catchの使い方と例外処理のまとめ!]
(https://www.sejuku.net/blog/29293)