第 14 章 エラー処理とデバッグ
1. ブラウザのエラー報告をオンにする
1.1 Internet Explorer
□Toos → インターネット オプション → 詳細設定→ すべてのスクリプト エラーに関する通知を表示する
1.2 Firefox
□ ツール→ エラーコンソール (Firebug)
1.3 Safari
□編集 → 環境設定 → 詳細設定 → メニューバーに開発メニューを表示/開発 → エラーコンソールを表示
1.4 Opera
□ツール → 詳細設定 → エラーコンソール
1.5 Chrome
□このページの制御 → 開発者 → JavaScript コンソール
2. エラー処理
2.1 Try-catch ステートメント
try{
//エラーを引き起こす可能性のあるコード
}catch( error){
//エラー発生時の対処方法
}
□エラーが発生した場合、catch はエラー情報を含むオブジェクトを回復します。すべてのブラウザと互換性のある message 属性があります。
2.1.1finally 句
try-catch 句はオプションです。finally 句を使用すると、そのコードが実行されます。
2.1.2 エラータイプ
□エラー: 基本タイプ。主な目的は、開発者がカスタム エラーをスローすることです。
□EvalError: eval() 関数を使用して例外が発生した場合にスローされます。
□RangeError: 値が対応する範囲を超えるとトリガーされます。
□ReferenceError: オブジェクトが見つからない場合
□SyntaxError: 構文エラーのある JavaScript 文字列を eval() 関数に渡します。
□TypeError: 変数に予期しない型が格納されている場合、または存在しないメソッドにアクセスした場合。
□URIError: encodeURI() または decodeURI() を使用し、URI の形式が正しくない場合。
さまざまなエラー タイプに応じてエラー処理を実行します。
try{
soemFunction()
}catch(error){
if(errorinstanceof TypeError){
//processing Type error
}else if(errorinstanceofReferenceError){
//参照エラーの処理
}else{
//他の型エラーの処理
}
}
3. try-catch を上手に活用しましょう
□try-catch ステートメントを使用すると、ブラウザはエラーが処理されたと認識します。
□try-catch ステートメントを使用します。これは、制御できないエラーをキャッチするのに最適です。
□コード内でエラーが発生していることが明確にわかっている場合は、try-catch を使用せずにエラーを修正する必要があります。
2.2 スローエラー
①try-catch ステートメントとペアになっている throw 演算子があります。 throw 演算子が見つかると、コードの実行はただちに停止します。コードの実行は、try-catch ステートメントがスローされた値をキャプチャした場合にのみ続行されます。
②throw new Error("何か悪いことが起こりました。"); または、プロトタイプチェーンを使用して、Error を継承してカスタムエラータイプを作成します。
2.2.1 エラーをスローするタイミング
2.2.2 エラーのスローと try-catch の使用
2.2.3 エラー イベント
①try-catch で処理されないエラーは、次のエラー イベントをトリガーします。ウィンドウオブジェクト。
②どのブラウザでも、onerror イベントハンドラはイベントオブジェクトを作成しません。ただし、エラー メッセージ、エラーが存在する URL、行番号の 3 つのパラメータを受け入れます。 (エラーメッセージのみが役に立ちます)
③ onerror イベントハンドラーを指定します。これは DOM0 レベルのテクノロジーを使用する必要があります。
window.onerror = function(message,url,line){
alert(message);
return false; //この関数は、実際にはドキュメント全体の try-catch ステートメントとして機能します。 . コードなしで処理されるすべてのランタイム エラーを捕捉します。
};
④画像はエラーイベントにも対応しています。画像の src 属性の URL が認識された画像形式を返せない限り、エラー イベントがトリガーされます。このときのエラーイベントはDOM形式に従い、画像を対象としたイベントオブジェクトを返します。
3. エラー処理方法
3.1 よくあるエラーの種類
□型変換エラー
□データ型エラー
□通信エラー
3.1.1 型変換エラー
型変換値をデータ型に自動的に変換する演算子または他の言語構造を使用すると、エラーが発生します。型変換エラーは、等号 (==) および不等号 (!==) 演算子を使用する場合、または if、for、while などのフロー制御ステートメントで非ブール値を使用する場合に最も一般的に発生します。
3.1.2 データ型エラー
データ型エラーは、関数に予期しない値が渡されたときに発生する可能性が最も高くなります。
3.1.3 通信エラー
①URLの形式が間違っているか、送信したデータに問題があります。クエリ文字列の場合は、encodeURIComponent() メソッドを使用する必要があります。
② サーバーから応答されたデータが正しくない場合にも通信エラーが発生することがあります。
3.2 致命的なエラーと致命的ではないエラーの区別
① 致命的ではないエラー
□ ユーザーのメインタスクには影響しない
□ ページの一部のみに影響する
□ 回復可能
□ 同じ操作を繰り返します エラーは解消できます
② 致命的なエラー
□ アプリケーションはまったく実行できません
□ エラーは明らかにユーザーの主な操作に影響します
□ 他の関連エラーが発生します
3.3 エラーをサーバーに記録します: ( (省略)
4. デバッグ技術
4.1 コンソールへのメッセージのログ
①IE8、Firefox、Chrome、Safari の場合、メッセージは JavaScript コンソールに書き込むことができます。コンソールオブジェクト。オブジェクトには次のメソッドがあります。
□error(message): エラー メッセージをコンソールにログ記録します
□info(message): 情報メッセージをコンソールにログ記録します
□log(message): 一般メッセージをログに記録しますコンソール
□warn(message): 警告メッセージをコンソール
に記録します。② もう 1 つの解決策は、LiveConnect を使用することです。これは、JavaScript で Java コードを実行します。
③JavaScript コンソールにメッセージを書き込むための統一インターフェイス:
function log(message){
if(typeof console == "object"){
console.log(message); else if(typeof opera == "object"){
opera.postError(message);
}else if(typeof java == "object" && typeof java.lang == "object"){
java.lang.System.out.println(message);
}
}
4.2 現在のページにメッセージを記録する
4.3 エラーをスローする
①大規模なアプリケーションの場合エラーは通常、assert() 関数を使用してスローされます。この関数は 2 つのパラメータを受け入れます。1 つは true と評価される条件で、もう 1 つは条件が false の場合にスローされるエラーです。
functionassert(condition, message){
if(!condition){
throw new Error(message);
}
}
②応用:
function dive( num1 ,num2){
assert(typeof num1 == "number"&&typeof num2== "number","divide():両方の引数は数値でなければなりません。");
return num1/num2> }
5. 一般的な IE エラー
□ 操作が終了しました
□ 無効な文字
□ メンバーが見つかりません
□ 不明な実行時エラー
□ 構文エラー
□ システムが見つかりませんリソース