メインコンテンツへ移動

JS 学習ノート 8_エラー処理

無料2015-04-12#JS#js错误处理

本稿では js のエラー処理構文、エラータイプ、error イベント、および 6 つのエラー回避の常識を紹介する

##1.エラー処理構文:(js には例外 exception という概念はなく、すべてエラー error です)

try{
  //throw new Error(msg);
  //throw '错误';
  //throw false;
  //throw ...
  //throw 演算子の被演算数には何の制限もなく、自由に投げられます
}
catch(err){
  //alert(err.message);//message はすべてのブラウザでサポートされる唯一のプロパティです
}
finally{
  //
}

注意:[IE7-] にはバグがあります:catch ブロックがないと、finally ブロックは実行されません。そのため、完全な try-catch-finally を使用することを推奨します

高程には記述上の誤りがあります(中文版 501 ページ):

読者は必ず覚えておいてください、コードが finally 節を含む限り、try または catch 文ブロック内の return 文はすべて無視されます。

本机テスト結果:finally に入る前に遭遇した return は、finally 完了後にも return されます。本に書かれている「無視」というわけではなく、おそらく単なる曖昧さでしょう。

さらに、js には java の例外処理と同じ秘密が存在します。例えば:

//コード来自 http://www.cnblogs.com/averey/p/4379646.html
function aaa(){
  var x = 1;

  try {
    return ++x;
  } catch (err) {

  } finally {
    ++x;
  }
  return x;
}

(function(){
  var y = aaa();
  alert(y);//2
})();

詳細は以下を参照してください:

もちろん、このような小さな秘密は知っていればよく、深く追求する必要はありません

##2.7 つのエラータイプ

  • Error

  • EvalError

  • RangeError

  • ReferenceError

  • SyntaxError

  • TypeError

  • URIError

##3.error イベント

ブラウザのエラー報告を避ける最後の防衛線として、構文は以下の通り:

window.onerror = function(msg, url, line){
  return true;//エラー報告しない
}

注意:上記�� DOM0 級方式のみ でイベントハンドラを追加できます。DOM2 級標準に準拠していないためです

注意:高程中文第三版 506 ページに問題があります。実際には true を返すとエラー報告せず、本に書かれている false を返すのではありません。テストコードは以下の通り:

window.onerror = function(e) {
  return true;//Chrome, FF, IE8 はすべてエラー報告しない
  //return false;//Chrome, FF はエラー報告、IE8 はエラー報告しない
}
'str'.startWith('x');///エラーをトリガー

##4.いくつかの常識

  1. 型変換と型変換エラーを避けるため、できるだけ===と!==を使用して比較してください

  2. 制御文内ではできるだけブール値を使用し、if(value) のような構造は使用しないでください。自動的に行われる型変換により、複数の偽値が存在するためです:

    • false

    • +0/-0

    • undefined

    • null

    • ''/""(空文字列)

    • NaN

これらの偽値は予期しない結果を招く可能性があります。===と!==のみを使用すれば false という偽値のみとなり、意味を正確に表せます

  1. if(value != null) や if(value != undefined) のような検出は使用せず、以下の通りにすべきです:

    • オブジェクト値の検出には if(value instanceof Type) を使用

    • 基本タイプ値の検出には if(typeof value === strType) を使用

  2. body 内のスクリプトで document.body 関連の DOM 操作(ノードの追加/削除)を行わないでください。IE エラーを発生させる可能性があるためです

  3. 外部 js ファイルも js 構文エラーを引き起こす可能性があり、エラー情報は不正確で発見が難しいため、外部スクリプトを参照する前に十分なテストを行うべきです

  4. IE の URI 長さ制限は 2048 文字以下であるため、get で post リクエストを置き換えてパフォーマンスを最適化する際、クエリ文字列の長さをできるだけ短くするべきです(例えば短いフィールド名を使用するなど)

コメント

コメントはまだありません

コメントを書く