Es6-error-handling
ES6-エラー処理
プログラミングには、構文エラー、実行時エラー、論理エラーの3種類のエラーがあります。
構文エラー
- 構文解析エラー*とも呼ばれる構文エラーは、従来のプログラミング言語ではコンパイル時に、JavaScriptでは解釈時に発生します。 JavaScriptで構文エラーが発生すると、構文エラーと同じスレッド内に含まれるコードのみが影響を受け、他のスレッド内の残りのコードは、エラーを含むコードに依存しないと仮定して実行されます。
ランタイムエラー
- 例外*とも呼ばれるランタイムエラーは、実行中(コンパイル/解釈後)に発生します。 例外は、例外が発生するスレッドにも影響を与え、他のJavaScriptスレッドが通常の実行を継続できるようにします。
論理エラー
論理エラーは、追跡が最も難しいタイプのエラーです。 これらのエラーは、構文エラーまたは実行時エラーの結果ではありません。 代わりに、スクリプトを駆動するロジックを間違えたときに発生し、期待どおりの結果が得られません。
これらのエラーは、ビジネス要件、プログラムに含めるロジックの種類に依存するため、キャッチできません。
JavaScriptは、実行時エラーが発生するとErrorオブジェクトのインスタンスをスローします。 次の表に、定義済みのタイプのErrorオブジェクトを示します。
Sr.No | Error Object & Description |
---|---|
1 |
EvalError グローバル関数* eval()*に関して発生するエラーを表すインスタンスを作成します。 |
2 |
RangeError 数値変数またはパラメーターが有効範囲外にある場合に発生するエラーを表すインスタンスを作成します。 |
3 |
ReferenceError 無効な参照を逆参照するときに発生するエラーを表すインスタンスを作成します。 |
4 |
SyntaxError コードの解析中に発生する構文エラーを表すインスタンスを作成します。 |
5 |
TypeError 変数またはパラメーターが有効なタイプでない場合に発生するエラーを表すインスタンスを作成します。 |
6 |
URIError
|
例外を投げる
エラー(事前定義またはユーザー定義)は、* throwステートメント*を使用して発生させることができます。 後でこれらの例外をキャプチャして、適切なアクションを実行できます。 以下は同じ構文です。
構文:一般的な例外をスローする
throw new Error([message])
OR
throw([message])
構文:特定の例外をスローする
throw new Error_name([message])
例外処理
例外処理は、* try … catchステートメント*で実行されます。 プログラムで例外が発生すると、プログラムは非友好的な方法で終了します。 この予期しないエラーから保護するために、try … catchステートメントでコードをラップできます。
tryブロックの後には、正確に1つのcatchブロックまたは1つのfinallyブロック(または両方)が続く必要があります。 tryブロックで例外が発生すると、例外がeに配置され、catchブロックが実行されます。 オプションのfinallyブロックは、try/catchの後に無条件に実行されます
以下は同じ構文です。
try {
//Code to run
[break;]
} catch ( e ) {
//Code to run if an exception occurs
[break;]
}[ finally {
//Code that is always executed regardless of
//an exception occurring
}]
例
var a = 100;
var b = 0;
try {
if (b == 0 ) {
throw(“Divide by zero error.”);
} else {
var c = a/b;
}
}
catch( e ) {
console.log("Error: " + e );
}
出力
上記のコードが正常に実行されると、次の出力が表示されます。
Error: Divide by zero error
注-注:1つの関数で例外を発生させ、同じ関数または try … catch ブロックを使用して呼び出し元関数でその例外をキャプチャできます。
onerror()メソッド
*onerror* イベントハンドラは、JavaScriptでのエラー処理を容易にする最初の機能でした。 ページで例外が発生するたびに、ウィンドウオブジェクトでエラーイベントが発生します。
例
<html>
<head>
<script type = "text/javascript">
window.onerror = function () {
document.write ("An error occurred.");
}
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type = "button" value = "Click Me" onclick = "myFunc();"/>
</form>
</body>
</html>
出力
上記のコードが正常に実行されると、次の出力が表示されます。
onerrorイベントハンドラは、エラーの正確な性質を識別するために3つの情報を提供します-
- エラーメッセージ-ブラウザが特定のエラーに対して表示するのと同じメッセージ。
- URL -エラーが発生したファイル。
- 行番号-エラーの原因となった特定のURLの行番号。
次の例は、この情報を抽出する方法を示しています。
例
<html>
<head>
<script type = "text/javascript">
window.onerror = function (msg, url, line) {
document.write ("Message : " + msg );
document.write ("url : " + url );
document.write ("Line number : " + line );
}
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type = "button" value = "Click Me" onclick = "myFunc();"/>
</form>
</body>
</html>
カスタムエラー
JavaScriptは、カスタムエラーの概念をサポートしています。 次の例で同じことを説明します。
例1:デフォルトメッセージを含むカスタムエラー
function MyError(message) {
this.name = 'CustomError';
this.message = message || 'Error raised with default message';
}
try {
throw new MyError();
} catch (e) {
console.log(e.name);
console.log(e.message); //'Default Message'
}
上記のコードが正常に実行されると、次の出力が表示されます。
CustomError
Error raised with default message
例2:ユーザー定義のエラーメッセージを含むカスタムエラー
function MyError(message) {
this.name = 'CustomError';
this.message = message || 'Default Error Message';
} try {
throw new MyError('Printing Custom Error message');
}
catch (e) {
console.log(e.name);
console.log(e.message);
}
上記のコードが正常に実行されると、次の出力が表示されます。
CustomError
Printing Custom Error message