例外処理 try ~ catch
例外処理とは、適切なエラー処理を行うのための方法です。try ~ catch 文によって実装します。
ディスク容量不足やネットワークの不具合といった内部でエラーが起こって処理がフリーズするとユーザーとしても何が起こったのか分かりません。
そのようなエラーが発生しても処理を止めずにそのエラーを捉えた処理に移行します。
try 文には例外が発生する可能性があるコードを入れます。try 文のコードでエラーが発生すると catch 文の中のコードに移行します。
e はエラーオブジェクトです。開発用コンソールで内容を確かめることができます。
try ~ catch による例外処理以降も処理が続きます。継続する処理は以下のように try ~ catch 文以降に編集します。
以下の例では、try ~ catch による例外処理以降に console.log( '' );
が実行されます。
XMLHttpRequest ではイベントを捉えてステータス番号で場合分けする方法を使用します。try ~ catch と XMLHttpRequest の併用は上手く機能しないようです。
例外処理はフォーム入力などのエラー処理にも使いたくなりますが、そのような場合は通常のフロー処理の方が適しています。
例外処理は多用すると処理速度が遅くなり、正しく処理されないこともあります。ディスク容量不足やネットワークの不具合といった内部での予測不可能なエラーに使用した方がよいようです。
ページ内 Index
Error オブジェクト
try ~ catch 文に利用する Error オブジェクトがあります。
このオブジェクトは任意に生成することもできます。
Error() コンストラクターでエラーメッセージを作成することができます。エラーメッセージは .message プロパティで取得することができます。
throw キーワードと組み合わせると任意にエラーを発生させることができます。
エラーを発生させる
throw キーワードと Error() コンストラクターでエラーを任意に発生させることができます。
throw キーワードは、try ~ catch 文の中で使用します。
throw された Error インスタンスはそのまま catch() ブロックの処理に移行します。
動きに関してはError クラス Example
を参照してください。
エラーを発生させることを、例外を明示的にスロー(throw)するといったりします。
複数の例外処理
JavaScript でもエラーのタイプごとに例外処理を分岐することができます。
finally ブロックはどの条件にも該当しない場合に処理を実行します。
以下のエラーオブジェクトをエラー条件に使用することができます。これらのエラーオブジェクトはシステムで発生します。
エラーインスタンス | 概要 |
---|---|
EvalError | 引数の文字列を数式として実行する eval() に関するエラー |
InternalError | 再帰処理において "too much recursion" (深すぎる再帰) などによって内部エラーが発生した場合 |
RangeError | 変数や引数が有効範囲外であるエラー |
ReferenceError | 不正な参照先から値を取得したら |
SyntaxError | 構文エラー |
TypeError | 変数や引数の型が有効でない場合 |
URIError | encodeURI() または decodeURI() に不正な引数が渡された場合 |
stack 値でデバグ
Error オブジェクトのプロパティの stack 値はエラーが発生したまでの経緯を表示します。
以下の例では catch 文で取得した e.stack
からエラーが発生した経緯を確認しています。
実行経緯をたどることでデバグに役立てることができます。ただし、stack 値が機能するブラウザでなければなりません。
Example
例外処理 try ~ catch と Error オブジェクトの例です。
開発コンソールを参照してください。コメントアウトしてあるものは説明にはあるものの利用できるかわからないものの試用のためです。