編寫高質量JavaScript的有效方法

編寫高質量JavaScript的有效方法

1、js的特別之處

  1. 浮點數計算不精確,應該儘可能轉爲整數進行計算
  2. 小心強制的類型轉換。
    NaN是js中惟一一個不等於自身的值,能夠利用這一點來檢測NaN.
    js中的七個假值:false,0,-0,null,undefined,NaN,"".
  3. 當參數類型不一樣時, == 運算符會對參數用一套難以理解的隱式強制轉換的規則進行轉換,因此應儘可能使用 === 運算符,比較不一樣類型的值時,先進行手動的轉換後在進行比較。
  4. 分號插入規則
  • 分號僅在}標記以前、一個或多個換行以後和程序輸入的結尾插入
  • 分後僅在後面的輸入標記不能解析時插入
  • for循環頭部var i=0以後必須顯式的插入分號
  • 在return , throw, break, continue, ++ ,-- 的參數以前絕對不能換行,不然會在換行前強制插入分號javascript

    若是下一條語句以(, {, +, -. / 開始時,前一行語句不能省略分號,不然會視爲同一行語句執行。java

2、變量做用域

  1. 閉包的三個特性
  • js容許你應用在當前函數外定義的變量
  • 即時外部函數已經返回,當前函數仍然能夠引用外部函數中定義的變量
  • 閉包能夠更新外部變量的值api

    3、使用函數

  1. 永遠不要修改arguments對象
  2. 使用bind方法建立綁定到適當接受者的函數
function bind(fn, context) {
    return function() {
        return fn.apply(context, arguments);
    };
}
  1. 避免使用函數對象的toString()方法
  2. 避免使用非標準的arguments.callee和arguments.callee屬性數組

    4、對象和原型

  3. 使用Object.getPrototypeOf(obj)函數而不是obj._proto_來檢測原型
  4. 不要修改_proto_屬性
  5. 使用閉包來存儲私有數據
  6. 繼承時使用object.create(parent.prototype)來構造子類的原型,以免調用父類的構造函數
  7. 不要重用父類的屬性名(容易引起衝突)
  8. 不要去繼承內置的Array、Function等內置的標準類緩存

    5、數組與字典

  9. 屬性枚舉時使用hasOwnProperty過濾原型屬性,防止原型污染。
    爲了不hasOwnProperty被意外覆蓋,能夠預先緩存hasOwn方法或者直接在原型中加入hasOwn方法。
var hasOwn = {}.hasOwnProperty;
  1. 由於for...in循環沒法保證循環順序,因此用數組而不是字典來存儲有序集合,使用for循環循環數組。
  2. 絕對不要在Object.prototype中增長可枚舉的屬性
  3. 不要在枚舉時修改枚舉對象
  4. ES5中Array自帶的foreach,map,filter等方法優於for循環,但若是須要提早終止循環仍是推薦使用傳統的循環。閉包

    6、庫和API設計

  5. 接口設計爲接受關鍵字參數的選項對象,使用extend合併默認參數對象和用戶寫入的參數對象。
  6. 避免過分的強制轉換,考慮使用防護性監視非預期的輸入。
  7. 支持方法鏈.app

相關文章
相關標籤/搜索