ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript例外処理におけるtry catchfinallyの解析例

JavaScript例外処理におけるtry catchfinallyの解析例

黄舟
黄舟オリジナル
2017-10-26 09:41:091661ブラウズ

構文構造

try catchfinally は、例外処理メカニズムを提供する ECMAScript-262 第 3 版の標準です。構文構造は次のとおりです:


1 try{
2 //可能会发生的错误代码
3 }
4 catch(error){
5 //错误处理
6 }finally{
7  //无论是否有异常都会执行
8 }

構文は、java.net などのほとんどの言語と同じです。 、try{} コード ブロックが catch した場合 例外が発生すると、catch ブロックはエラー メッセージ オブジェクト (Error のインスタンス) を取得します。

3f1c4e4b6b16bbbd69b2ee476dc4f83a2cacc6d41bbb37262a98f745aa00fbf0 コード ブロックでエラーが発生した場合は、エラーを引き起こす可能性のあるコードを try ブロックに配置し、エラー処理を js に配置する必要があります。例外処理をキャッチすると、現在の 3f1c4e4b6b16bbbd69b2ee476dc4f83a コード ブロックの後続のコードは実行されませんが、次のような他の 3f1c4e4b6b16bbbd69b2ee476dc4f83a2cacc6d41bbb37262a98f745aa00fbf0 コード ブロック コードには影響しません。逆に、後続のコードは引き続き実行されます。 実行は次のようになります:


 1 <script> 
 2   function run(){ 
 3       console.log(age); 
 4   } 
 5     run(); 
 6     console.log(&#39;可以输出吗?&#39;);//没有执行 
 7 </script> 
 8  
 9 <script>
 10     console.log(&#39;这是第二个代码块&#39;);//执行了,这是第二个代码块
 11 </script>

finally ステートメント

finally コード ブロックがある場合、その中のコードは、たとえリターンがあっても、理由に関係なく実行されます。 catch ステートメント内の次のコード:

 1 <script> 
 2   function run(){ 
 3       try{ 
 4           console.log(age); 
 5       }catch(error){ 
 6  
 7       } 
 8  
 9   }
 10     run();
 11     console.log(&#39;可以输出吗?&#39;);//可以输出吗?
 12 </script>
 13 
 14 <script>
 15     console.log(&#39;这是第二个代码块&#39;);//这是第二个代码块
 16 </script>

エラーの種類を理解する

コードの実行中にエラーが発生すると、Error オブジェクトが作成され、スローされます。このオブジェクトにはエラーの説明情報が含まれています。

たとえば、

try...catch(error){...}

ステートメントでは、Error は Error 型によってスローされるオブジェクトであり、このオブジェクトには名前、エラー名、メッセージ、エラー情報という 3 つの基本属性があります。 、スタック、エラー スタック情報。

コードの実行中に発生する可能性のあるエラーにはさまざまな種類があるため、Error からは次のようないくつかの子が派生します。この基本型の主な目的は、開発者がカスタム エラーをスローすることです。 OrEvalerror は、エラーの原因を示す ERROR インスタンスを作成します。これは、evac () に関連しています。

内部エラーJavaScript エンジンの内部エラーを表す例外のインスタンスを作成します。 たとえば、「再帰が多すぎる」場合、Rageerror はエラーの原因を示す ERROR インスタンスを作成しました。数値変数またはパラメータが有効範囲を超えました。 ReferenceError エラーの原因: 無効な参照を示すエラー インスタンスを作成します。 syntaxErrorエラーインスタンスを作成するためのエラーの原因を示す:eval()でコードを解析するプロセス中に発生した構文エラー。 TypeErrorエラー インスタンスを作成して、エラーの原因を示します: 変数またはパラメーターが有効な型に属していません。

URIError エラーインスタンスを作成して、エラーの原因を示します: encodeURI() または decodeURl() に渡されたパラメータが無効です。

Error は基本クラスであり、他のエラー タイプは Error タイプから継承されるため、サブクラスには名前、メッセージ、スタックという 3 つの基本属性もあります。


これらのエラー タイプを使用すると、次のようなコードを作成して、例外のタイプを判断して特定のタイプの例外を具体的に処理できます。



    function say() {        try {
            console.log(age)            return;
        } catch (erroe) {
            console.log(erroe.message);//age is not defined
            return;
        } finally {
           console.log(&#39;finally 执行了&#39;);//finally 执行了        }
    }
    say();


カスタム エラー タイプをスローする

構文: throw 例外;

例外は、次のような任意のタイプのデータにすることができます:

throw 12345;

throw 'hello';

throw true;

throw {name:'Joel',age:20};

throw ステートメントを使用して、次のようなカスタム例外をスローします。

 1 <script> 
 2     function run() { 
 3         try { 
 4             say("hello word"); 
 5         } 
 6         catch (error) { 
 7             for (var p in error) { 
 8                 document.writeln(error[p]); 
 9             }
 10             //上面可以遍历错误
 11             if (error instanceof EvalError) {
 12                 //如果非法调用了eval()函数,则会抛出EvalError的异常。
 13                 alert("EvalError");
 14             } else if (error instanceof ReferenceError) {
 15                 //错误的引用,此例子是执行到了本步。
 16                 alert("ReferenceError");
 17             } else if (error instanceof RangeError) {
 18                 //数值超出了范围
 19                 alert("RangeError");
 20             } else if (error instanceof SyntaxError) {
 21                 //语法错误,错误发生在eval(),
 22                 alert("SyntaxError");
 23             } else if (error instanceof TypeError) {
 24                 //变量类型不是预期的
 25                 alert("TypeError");
 26             } else if (error instanceof URIError) {
 27                 //错误发生在encodeURI()或decodeURI()中
 28                 alert("URIError");
 29             }
 30         }
 31     }
 32     run();
 33 </script>

JavaScript の例外処理メカニズム

実行された JavaScript コードでエラーが発生すると、JS エンジンは、JS に基づいて、対応するステップごとに対応する例外を探します。コールスタックキャッチで、対応するキャッチハンドラが見つからない場合、エラーがある場合、または新しいエラーがスローされた場合、エラー処理は最終的にブラウザに引​​き渡され、ブラウザは別のメソッドを使用します(IEは黄色のアイコンを表示します)三角形のパターン 左下隅に表示されますが、firefix はエラー コンソールに表示されます)

window.onerror

tyr-catch で処理されないエラーは、エラー イベントをトリガーします。


 1 <script> 
 2     function see(){ 
 3         try { 
 4             if(true){ 
 5                 throw new Error("my eroor!"); 
 6             } 
 7  
 8         } catch (error) { 
 9             console.log(error.name );//Error
 10             console.log(error.message);//my eroor!
 11             console.log(error.stack);//Error: my eroor! at see (try.html:12) at try.html:22
 12         }
 13     }
 14     see();
 15 </script>

window.onerror イベントは、msg エラー メッセージ、url エラーが発生したページの URL、および line エラーが発生したコード行の 3 つのパラメータを受け取ります。

フロントエンド コード例外監視ソリューション

try catch と window.onerror でエラー イベントをグローバルに監視することでエラー オブジェクトをキャプチャすると、フロントエンド JS コードのエラー監視が非常に簡単になります。

以上がJavaScript例外処理におけるtry catchfinallyの解析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:JS 参照型の概要次の記事:JS 参照型の概要