JavaScript異常処理

4510 ワード

プログラム異常
プログラムの異常は論理異常と文法異常に分けられます.初心者には文法が異常に多いです.絶えず勉強するにつれて言語に慣れてきて、文法が異常に少なくなります.JavaScriptには異常を処理するためのステートメントが提供されており、適切なときにそれらを使用すると、プログラムがよりロバストになる.
ただし、異常処理を濫用しないように注意すると、プログラムの可読性が悪くなります.
異常オブジェクト
すべての異常は対象です.
異常タイプJavaScriptでは、一般的な異常タイプは以下のような種類がある.
異常タイプ
簡単に述べる
エロエロErrorは最も基本的なエラータイプであり、他のタイプはこのタイプから継承されている.したがって、のこのタイプのエラーは珍しい.一般的に開発者がカスタマイズして投げたエラー
EveralError
このエラーはeval()関数を使って異常が発生した時に投げ出します.2つの場合はエラーが発生します.1.newを使用して実装します.2.変数名をevalとして試みます.キーワードですので、これは許可されていません.
RangeError
数値が範囲を超えています.Array操作でよく見られます.
ReferenceErrer
変数が見つかりません
SyntaxError
構文エラー
Type Error
タイプエラー
URIER orencodeURIまたはdecodeURIを使用すると、URLフォーマットが正しくないため、URIErrorエラーが発生する.
異常捕獲
try catchtryを使用してcatch文と捕獲異常を行う.tryは、異常が発生する可能性のあるコードブロックを検出するために使用される.  catchは、キャプチャされた異常を処理するために、パラメータを指定して異常情報を取得することができる.try...catch文には、1つまたは複数のステートメントを含むtryコードブロック、0つまたは1つのcatchコードブロックがあり、catchコードブロックのステートメントは、tryコードブロックに異常があるときに実行されます.tryコードブロック内のステートメント(またはtryコードブロック内で呼び出された方法)が例外をスローした場合、実行フローは直ちにcatchコードブロックに入ります.tryコードブロックに異常がない場合、catchコードブロックはスキップされます.


        "use strict";

        try {
                console.log(username);
        } catch (e) {  //           
                console.log("       :", e);
        }

/*

       : ReferenceError: username is not defined
    at 1.html:56

*/


finallyfinallyブロックは、tryおよびcatchブロックが完了した後に、try...catchに続くステートメントの前に実行されるステートメントを含む.finallyブロックは、例外があるかどうかにかかわらず実行される.異常が発生したら、異常処理がなくても、finallyブロックのステートメントが実行されます.


        "use strict";

        try {
                console.log(username);
        } catch (e) {  //           
                console.log("       ,ID:", e);
        } finally {
                console.log("            ");
        }



主動異常
throw
いくつかの場合、私たちは自発的に異常を投げ出す必要があります.throw文を使って異常を投げます.


        "use strict";

        throw new Error("      ")


式の形式
特定のタイプの表現ではなく、任意の表現を投げられます.下記のコードはいくつかの異なるタイプの表現を投げました.


        "use strict";

        throw "Error2";   // String type  
        throw 42;         // Number type
        throw true;       // Boolean type
        throw { toString: function () { return "I'm an object!"; } };


カスタム異常Errorプロトタイプのオブジェクトを継承し、カスタムの異常を設定することができます.  Error構築関数は、人類が読むことができるエラー記述情報を表示するためのmessageオプションのパラメータを有する.
関数形式


        "use strict";

        function MyError(message) {
                this.name = 'MyError';
                this.message = message || 'Default Message';
                this.stack = (new Error()).stack;
        }

        Object.setPrototypeOf(MyError, Error);  //   Error    

        try {
                throw new MyError();
        } catch (e) {
                console.log(e.name);  // MyError
                console.log(e.message);  // Default Message
        }


        try {
                throw new MyError("        ");
        } catch (e) {
                console.log(e.name);  // MyError
                console.log(e.message);  //         
        }


クラス形式


        "use strict";

        class MyError extends Error {
                constructor(message) {
                        super();
                        this.name = "MyError";
                        this.message = message || 'Default Message';
                        this.stack = (new Error()).stack;
                }
        }

        try {
                throw new MyError();
        } catch (e) {
                console.log(e.name);  // MyError
                console.log(e.message);  // Default Message
        }


        try {
                throw new MyError("        ");
        } catch (e) {
                console.log(e.name);  // MyError
                console.log(e.message);  //         
        }