ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript 高度なプログラミング読書メモ (20) js エラー処理_javascript スキル

JavaScript 高度なプログラミング読書メモ (20) js エラー処理_javascript スキル

WBOY
リリース: 2016-05-16 17:50:50
オリジナル
1159 人が閲覧しました
1. エラーの分類

1. 構文エラー: 解析エラーとも呼ばれ、従来の言語のコンパイル中および JavaScript での解釈中に発生します。これらのエラーは、コード内の予期しない文字によって直接引き起こされるため、直接コンパイル/解釈することはできません。構文エラーが発生すると、コードの実行を続行できなくなります。 JavaScript では、同じスレッド内のコードのみが構文エラーの影響を受けます。他のスレッドおよび他の外部参照ファイル内のコードは、エラーを含むコードに依存していない場合は実行を続行できます。
2. 実行時エラー:例外(例外、コンパイル中/インタプリタ後)とも呼ばれます。現時点では、問題はコードの構文にあるのではなく、場合によっては不正な操作を完了しようとすることにあります。例外は例外が発生したスレッドにのみ影響し、他の JavaScript スレッドは通常どおり実行を続けることができます。

2. エラー処理


JavaScript には、BOM の onerror イベント ハンドラー メソッドと ECMAScript の try...catch メソッドという 2 つのエラー処理方法が用意されています。
1. Onerror イベント処理関数
これは、JavaScript によるエラー処理を支援するために使用される最初のメカニズムです。ページで例外が発生すると、ウィンドウ オブジェクトでエラー イベントがトリガーされます。例:

コードをコピー コードは次のとおりです:


onerror 例
window.onerror = function() alert("発生したエラー! ");


body>




上記のコードでは、ページのロード時に存在しない関数を呼び出そうとすると例外がスローされます。 「エラーが発生しました」というエラーメッセージがポップアップ表示されます。ただし、ブラウザのエラー メッセージも表示されます。onerror メソッドから true を返すだけです。




コードをコピー
コードは次のとおりです:



1.1 エラー メッセージを取得します
onerror ハンドラーは、エラーの正確な性質を判断するために 3 種類の情報を提供します。
i) エラー メッセージ - 特定のエラーについて、ブラウザには同じ情報が表示されます
ii) URL - どのファイルでエラーが発生したか
iii) 行番号 - 指定された URL 内でエラーが発生した行番号。




コードをコピー
コードは次のとおりです。 window.onerror = function(sMessage, sUrl 、iLine) { alert("エラーが発生しました! " sMessage "nURL:" sUrl "nLine Number:" iLine);
return true;
}



1.2 画像読み込みエラー
ウィンドウオブジェクトonerror イベント ハンドラーをサポートする唯一のオブジェクトではありません。ファイルが存在しないなどの理由でイメージが正常にロードされなかった場合、次のようなエラー イベントがトリガーされます。



コードをコピーします

コードをコピー

コードは次のとおりです。
画像エラーテスト




注: window オブジェクトの onerror イベント ハンドラーとは異なり、画像の onerror イベントには追加情報のパラメーターがありません。

1.3 構文エラーの処理

onerror イベント ハンドラーは例外を処理できるだけでなく、構文エラーも処理できます。また、onerror イベント ハンドラーだけが例外を処理できます。
まず、イベント ハンドラーはページに表示される最初のコードである必要があります。イベント ハンドラーを設定する前に構文エラーが発生すると、イベント ハンドラーは役に立たなくなります。構文エラーがあると、コードの実行が完全に停止する可能性があることに注意してください。例:
コードをコピー コードは次のとおりです。

>
onError の例


🎜>目立つため 表示されているコード行 (エラー構文が含まれている) は、onerror イベント ハンドラーが送出される前に表示されるため、ブラウザはエラーを直接報告し、エラー後のコードは解釈されなくなります (スレッドがこのページを書き換えて構文エラーの前に onerror イベント ハンドラーを配置すると、2 つの警告が表示されると本には記載されています。ボックスが表示されます。1 つは構文エラーを表示し、もう 1 つは例外を表示しますが、テストの結果は同じで、2 つのエラーが報告され、onerror イベントの情報が表示されません。

の主な問題です。 onerror イベント ハンドラーを使用するということは、それが BOM であるということです。したがって、ブラウザーごとにこのイベントを使用してエラーを処理する方法には明らかな違いがあります。たとえば、IE でエラー イベントが発生した場合、通常のコードは引き続き実行されます。データは保持され、onerror イベント ハンドラーを通じてアクセスできます。Mozilla では、通常のコードの実行が終了し、エラーが発生する前のすべての変数とデータが破棄されます。2. try...catch メソッド

。 ECMPScript の第 3 版では、try...catch ステートメントが導入されています。基本的な構文は次のとおりです。



コードをコピーします


コードは次のとおりです。

try{ //code [break;] } catch ([例外]) { //code [break;] ] } [finally{
//code
}]


例:




コードをコピー

コードは次のとおりです。


Java とは異なり、ECMAScript 標準は try.. .catch ステートメント JavaScript は弱い型指定言語であり、catch 句で特定の種類の例外を指定する方法がないため、catch ステートメントは 1 つだけです。エラーの種類に関係なく、同じ例外によって処理されます。 catch ステートメント。複数の catch ステートメントを追加できますが、Mozilla のみが使用できるため、推奨されません。

最後に、例外が発生するかどうかに関係なく実行されるコードを含めます。開いているリンクを閉じたり、リソースを解放したりする場合に便利です。

2.1 ネストされた try...catch ステートメント

try...catch ステートメントの catch 句では、このときもエラーが発生します。例:



コードをコピーします。


コードは次のとおりです。 >

try { } >eval("a b"); catch(Exception) {
alert("catch 句でエラーが発生しました!"); 🎜>}finally{ alert("Completed") }

2.2 Error オブジェクト

エラーが発生した場合、JavaScript にはスローするための Error 基本クラスがあります。これには 2 つの特性があります:
i) name - エラーの種類を表す文字列
ii) message - 実際のエラー メッセージ
Error オブジェクトの名前はそのクラスに対応し、次のいずれかの値になります。 1 つ:
EvalError: eval() 関数でエラーが発生しました。
RangeError: 数値が JavaScript で表現できる範囲を超えています。
ReferenceError: 不正な参照が使用されました。 eval() 関数呼び出しで構文エラーが発生しました。その他のエラーはブラウザによって報告され、try...catch では処理できません。
TypeError: 変数の型が予期されていません。 encodeURI または decodeURI 関数エラーで発生しました。

2.3 エラーの種類の決定

各 try...catch ステートメントには catch 節は 1 つしかありませんが、スローされたエラーの種類を決定するには主に 2 つの方法があります。最初の例では、Error オブジェクトの name 属性を使用します:


try {
eval("a b");
} catch(oException) {
if (oException.name = "SyntaxError") {
alert("SyntaxError が発生しました!");
} else {
alert("別のエラーが発生しました!");
}
}


2 番目の演算子は、instanceof 演算子を使用し、別のエラー クラス名を使用します。


try {
eval("a b ");
} catch(oException) {
if (oExceptioninstanceof SyntaxError) {
alert("SyntaxError が発生しました!");
} else {
alert("その他のエラーが発生しました! ");
}
}


2.4 例外のスロー

ECMAScript の第 3 版で導入され、目的のために例外をスローするために使用されます。スローされるエラー オブジェクトは文字列、数値、ブール値、または実際のオブジェクトがエラー オブジェクトをスローすることもできます (コンストラクターにはエラー情報という 1 つの関数しかありません)。例:


throw new Error("Anエラーが発生しました!") ;


開発者によってスローされたエラーとブラウザ自体によってスローされたエラーは、try...catch でキャプチャされます。例:


function addTwoNumber(a, b) ) {
if (arguments.length < 2) {
throw new Error("2 つの数値を渡す必要があります!")
}
}
try {
result = addTwoNumber(90 );
} catch(oException) {
if (oException の SyntaxError) {
alert("SyntaxError:" oException.message); else if (oException の Error) ){
alter(oException.message);
}
}



3. デバッグ スキル

現在のブラウザでは、ほとんどの場合、デバッグ ツールを導入するだけで十分です。さらに、IE では IETest、FireFox では FireBug を使用することもできます。
著者: Artwl
出典: http://artwl.cnblogs.com
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート