javascript最適化--01高品質符号化

2655 ワード

javascriptの浮動小数点数:
  • Javascriptの数字は全部ダブル精度の浮動小数点です.
  • 64ビットの符号化数字.
  • は53ビットの精度の整数を表すことができます.
  • はビット演算を行うと32ビット整数(0,1シーケンス)に暗黙的に変換して計算します.
  • 浮動小数点演算は精度の問題があるかもしれません.できればすべて整数で計算したほうがいいです.
  • 厳格なモード:互換性の問題を考慮して、すぐに呼び出した関数式に自分を包んで他のファイルを接続することができます.
    NaN:自分が全部かどうかを判断する;
    オブジェクトの暗黙的変換:
  • 一般的なオブジェクトは、valueOf法により強制的に数字に変換され、toString法により強制的に文字列に変換される.
  • 両方がある場合、対象はvalueOfを選択します.
  • したがって、valueOf方法のオブジェクトがある場合は、toStringを実装して、valueOf方法で生成された数字の文字列形式を返すべきである.
  • 出力日付方法:
    function toYMD(date) {
       var y = date.getYear() + 1900,
           m = date.getMonth() + 1,
           d  = date.getDate();
      return y 
             + '/' + (m < 10 ? '0' + m : m)
             + '/' + (d < 10 ? '0' + d : d); 
    }
    
    セミコロン挿入規則:
  • は1行、1つまたは複数の改行の後、プログラム入力の末尾にセミコロンを省略するだけです.
  • セミコロンは、その後の入力フラグが解析できない時にのみ挿入されます. 
  • 次の行の先頭に注意してください.   ( [ +  -  /
  • 注意ギルドが強制的に増分された場合:  reutrn; throw;  後置自増減;break;continue;
  • セミコロンは、forループ空文の先頭に自動的にセパレータとして追加されません.
  •  文字列として16ビットのコードセル系列
  • Javascript文字列は、Uniodeコードポイントではなく、16ビットのコードユニットから構成されています.
  • Javascriptは2つのコードユニットを使用して2^16とそれ以上のUnicodeコードポイントを表しています.この2つのコードユニットはプロキシペアと呼ばれています.
  • エージェントは、文字列要素のカウントに影響を与える可能性があります.length、charCodeAt、charCodeAt方法および正規表現モード(例えば:'.')は影響を受けます.
  • 文字列操作を含むライブラリを使用する場合、コードポイントの範囲全体を文書で確認します.
  • は、URIオペレーティング関数sendcodeURI、decodeURI、encodeURIComponent、decodeURI、decodeURI、decodeURIComonent、decodecodeURIComponent、
  • などの、サードパーティを使用してコードポイントを識別することができる.
    クローズドを使う:
  • JSは、現在の関数以外で定義されている変数の参照を許可します.
  • 外部関数が戻っても、現在の関数は外部関数で定義された変数をそのまま使用することができます.
  • クローズドは、外部変数の値を更新することができます.
  • 変数宣言の昇格:
  • コードブロック内の変数宣言は、クローズド関数の上部に暗黙的に引き上げられ、手動で変数宣言を昇格させることができる.
  • Jsはブロックレベルの作用領域がなく、例外としてtry.catch文はキャプチャされた異常を変数に結び付けています.この変数の作用領域はcatch文ブロックだけです.
  • 即座に関数式を呼び出してローカルスコープを作成します.
    function wrap(a) {
       var result = [], i , n;
       for(i = 0, n = a.length; i < n; i++) {
            result[i] = function() {return a[i]};
       }
    return result; }
    var f = wrap([0,1,2]);
    上記の例では、reuslt[i]にiの値が格納されていますが、function(){return a[i]]というクローズドのiは外部iの参照が格納されていますので、最後にfに戻るiの値は全部3です.
    即座に関数式を呼び出す:
    function wrap(a) {
       var result = [], i , n;
       for(i = 0, n = a.length; i < n; i++) {
          (function(j) {
               result[i] = function() {return a[i]};
          })(i); 
       }
       return result;
    }
    
    注意IIIIFでは:
  • コードブロックには、飛び出すブロックのbreakとcontine ueが含まれていません.
  • thisを使って、argmentは意味を変えます.