jsシステム教程-17-js文法の異常処理-error、カスタム異常、try catch finally
11641 ワード
目次ディレクトリ エラー処理メカニズム Errオブジェクト例 元のエラータイプ SyntxErrorオブジェクト ReferenceErrオブジェクト RangeErrオブジェクト Type Errorオブジェクト URIERオブジェクト EveralErrerオブジェクト カスタムエラー throw文 try…catch構造 finallyコードブロック 原文アドレス カタログナビゲーション エラー処理メカニズム
Errオブジェクトの例
JavaScript解析や運転中にエラーが発生すると、エンジンはエラーオブジェクトを投げます.JavaScript原生はエリロ構造関数を提供しています.投げられたすべてのエラーはこの構造関数の実例です.メッセージ:エラーメッセージ情報 name:エラー名(非標準属性) stack:エラーのスタック(非標準属性) オリジナルエラータイプ
SyntaxErrorオブジェクト
SyntaxErrオブジェクトはコード解析時に発生する構文エラーです.
ReferenceErrオブジェクト
ReferenceErrオブジェクトは、存在しない変数を引用したときに発生したエラーです.
RangeErrオブジェクト
RangeErrオブジェクトは有効範囲を超えた値で発生したエラーです.主に何種類かの場合があります.一つは配列長が負、二つはNumberオブジェクトの方法パラメータが範囲外、及び関数スタックが最大値を超えています.
TypeErrオブジェクトは変数またはパラメータが予期されていない場合に発生するエラーです.例えば、文字列、ブール値、数値などの元のタイプの値にnewコマンドを使うと、newコマンドのパラメータは構造関数であるべきです.
URIERオブジェクト
URIErrorオブジェクトはURI相関関数のパラメータが正しくない時に投げ出すエラーで、主にencodeURI()、decodeURI()、encodeURIComponent()、decodedecodeURIComponent()、escape()とunescape()の6つの関数に関連します.
eval関数が正しく実行されていない場合、Evarrエラーが発生します.このエラータイプはもう使われなくなりました.以前のコードとの互換性を確保するために、保留を続けます.
カスタムエラー
JavaScript原生が提供した7つのエラーオブジェクト以外に、自分の間違ったオブジェクトを定義することもできます.
throw文の役割は、手動でプログラムを中断し、エラーをスローすることです.
throwはカスタムエラーを出すこともできます.
実際には、throwは任意の種類の値を投げることができる.つまり、そのパラメータはどの値でもよい.
エンジンは、throwが投げたメッセージを受信します.エラーの例でもありますし、他のタイプの値でもあります.
try…catch構造
エラーが発生したら、プログラムは実行を中止します.JavaScriptはtry...catch構造を提供しています.エラーを処理し、次の実行を選択することができます.
いくつかのコードがエラーであるかどうかを確認しないと、try...catchコードブロックにそれらを置くことができます.さらにエラーを処理するのに便利です.
catchコードブロックがエラーをキャッチした後、プログラムは中断されず、通常の流れに従って実行されます.
catchコードブロックの中には、更にエラーを投げて、さらに入れ子のtry...catch構造を使うこともできます.
異なる種類のエラーをキャッチするために、catchコードブロックに判定文を入れることができます.
finallyコードブロック
try...catch構造は最後にfinallyコードブロックを追加することができます.エラーが発生しても最後に実行しなければならないステートメントを表します.
原文の住所
本教程は知識共有署名-同じ方式で3.0プロトコルを共有する.
ディレクトリナビゲータ
ディレクトリナビゲータ
Errオブジェクトの例
JavaScript解析や運転中にエラーが発生すると、エンジンはエラーオブジェクトを投げます.JavaScript原生はエリロ構造関数を提供しています.投げられたすべてのエラーはこの構造関数の実例です.
var err = new Error(' ');
err.message // " "
JavaScript言語標準は、Errerオブジェクトの実例となるオブジェクトには、エラー時のヒント情報が必要であり、他の属性は言及されていません.ほとんどのJavaScriptエンジンは、Errerのインスタンスに対して、nameとstack属性を提供しています.それぞれが間違った名前と間違ったスタックを表していますが、それらは標準ではなく、それぞれの実装があります.Error
例のオブジェクトは最も一般的なエラータイプであり、それに基づいて、JavaScriptは他の6つのエラーオブジェクトも定義している.つまり、Errerの6つの派生オブジェクトが存在する.SyntaxErrorオブジェクト
SyntaxErrオブジェクトはコード解析時に発生する構文エラーです.
//
var 1a;
// Uncaught SyntaxError: Invalid or unexpected token
//
console.log 'hello');
// Uncaught SyntaxError: Unexpected string
上のコードのエラーは文法解析段階で発見されますので、SyntxErrを投げます.最初のエラーメッセージは「token不正」で、2番目のエラーメッセージは「文字列が要求に合わない」です.ReferenceErrオブジェクト
ReferenceErrオブジェクトは、存在しない変数を引用したときに発生したエラーです.
//
unknownVariable
// Uncaught ReferenceError: unknownVariable is not defined
, , this 。
//
console.log() = 1
// Uncaught ReferenceError: Invalid left-hand side in assignment
// this
this = 1
// ReferenceError: Invalid left-hand side in assignment
上のコードは関数のconsolie.logの実行結果とthisの割り当てに対して、結果としてReferenceErrエラーを引き起こしました.RangeErrオブジェクト
RangeErrオブジェクトは有効範囲を超えた値で発生したエラーです.主に何種類かの場合があります.一つは配列長が負、二つはNumberオブジェクトの方法パラメータが範囲外、及び関数スタックが最大値を超えています.
//
new Array(-1)
// Uncaught RangeError: Invalid array length
TypeErrオブジェクトTypeErrオブジェクトは変数またはパラメータが予期されていない場合に発生するエラーです.例えば、文字列、ブール値、数値などの元のタイプの値にnewコマンドを使うと、newコマンドのパラメータは構造関数であるべきです.
new 123
// Uncaught TypeError: number is not a func
var obj = {};
obj.unknownMethod()
// Uncaught TypeError: obj.unknownMethod is not a function
上のコードの第二の場合、オブジェクトを呼び出す方法は存在しません.機能ではなく、Type Errエラーも投げられます.URIERオブジェクト
URIErrorオブジェクトはURI相関関数のパラメータが正しくない時に投げ出すエラーで、主にencodeURI()、decodeURI()、encodeURIComponent()、decodedecodeURIComponent()、escape()とunescape()の6つの関数に関連します.
decodeURI('%2')
// URIError: URI malformed
EveralErrerオブジェクトeval関数が正しく実行されていない場合、Evarrエラーが発生します.このエラータイプはもう使われなくなりました.以前のコードとの互換性を確保するために、保留を続けます.
カスタムエラー
JavaScript原生が提供した7つのエラーオブジェクト以外に、自分の間違ったオブジェクトを定義することもできます.
function UserError(message) {
this.message = message || ' ';
this.name = 'UserError';
}
UserError.prototype = new Error();
UserError.prototype.constructor = UserError;
上のコードは間違ったオブジェクトをカスタマイズして、Errオブジェクトを継承します.このようなカスタムタイプのエラーが発生します.new UserError(' !');
throw文throw文の役割は、手動でプログラムを中断し、エラーをスローすることです.
if (x < 0) {
throw new Error('x ');
}
// Uncaught ReferenceError: x is not defined
上のコードの中で、変数xが0より小さい場合、手動でエラーを投げ、ユーザーxの値が正しくないということを伝えると、プログラム全体はここで中断されます.throwが投げたエラーはそのパラメータであり、ここではErrの例であることが分かります.throwはカスタムエラーを出すこともできます.
function UserError(message) {
this.message = message || ' ';
this.name = 'UserError';
}
throw new UserError(' !');
// Uncaught UserError {message: " !", name: "UserError"}
上のコードの中で、throwが投げ出したのはUserErrの例です.実際には、throwは任意の種類の値を投げることができる.つまり、そのパラメータはどの値でもよい.
//
throw 'Error!';
// Uncaught Error!
//
throw 42;
// Uncaught 42
//
throw true;
// Uncaught true
//
throw {
toString: function () {
return 'Error!';
}
};
// Uncaught {toString: ƒ}
JavaScriptエンジンにとって、throw文が発生したら、プログラムは中止されます.エンジンは、throwが投げたメッセージを受信します.エラーの例でもありますし、他のタイプの値でもあります.
try…catch構造
エラーが発生したら、プログラムは実行を中止します.JavaScriptはtry...catch構造を提供しています.エラーを処理し、次の実行を選択することができます.
try {
throw new Error(' !');
} catch (e) {
console.log(e.name + ": " + e.message);
console.log(e.stack);
}
// Error: !
// at :3:9
// ...
上のコードの中で、tryコードブロックはエラー(上の例ではthrow文)を投げました.JavaScriptエンジンは直ちにコードの実行をcatchコードブロックに変えます.またはエラーはcatchコードブロックに捕獲されました.catchは一つのパラメータを受け入れて、tryコードブロックの投げた値を表します.いくつかのコードがエラーであるかどうかを確認しないと、try...catchコードブロックにそれらを置くことができます.さらにエラーを処理するのに便利です.
try {
f();
} catch(e) {
//
}
上のコードでは、関数fがエラーを実行すると、catchコードブロックを行い、エラーを処理します.catchコードブロックがエラーをキャッチした後、プログラムは中断されず、通常の流れに従って実行されます.
try {
throw " ";
} catch (e) {
console.log(111);
}
console.log(222);
// 111
// 222
上のコードでは、tryコードブロックから投げられたエラーが、catchコードブロックに取り込まれた後、プログラムは下の方向に進みます.catchコードブロックの中には、更にエラーを投げて、さらに入れ子のtry...catch構造を使うこともできます.
var n = 100;
try {
throw n;
} catch (e) {
if (e <= 50) {
// ...
} else {
throw e;
}
}
// Uncaught 100
上のコードの中で、catchコードの中からまた一つのエラーが出ました.異なる種類のエラーをキャッチするために、catchコードブロックに判定文を入れることができます.
try {
foo.bar();
} catch (e) {
if (e instanceof EvalError) {
console.log(e.name + ": " + e.message);
} else if (e instanceof RangeError) {
console.log(e.name + ": " + e.message);
}
// ...
}
上記のコードでは、catchがエラーをキャッチした後、エラーの種類を判断し、異なる処理を行います.finallyコードブロック
try...catch構造は最後にfinallyコードブロックを追加することができます.エラーが発生しても最後に実行しなければならないステートメントを表します.
function cleansUp() {
try {
throw new Error(' ……');
console.log(' ');
} finally {
console.log(' ');
}
}
cleansUp()
//
// Error: ……
上のコードには、catch文のブロックがないため、エラーはキャプチャされていません.finallyコードブロックを実行した後、プログラムはエラーの場所で中断されます.function idle(x) {
try {
console.log(x);
return 'result';
} finally {
console.log("FINALLY");
}
}
idle('hello')
// hello
// FINALLY
// "result"
原文の住所原文の住所
本教程は知識共有署名-同じ方式で3.0プロトコルを共有する.
ディレクトリナビゲータ
ディレクトリナビゲータ