最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript中的isXX系列是否繼續(xù)使用的分析

 更新時間:2011年04月16日 23:30:56   作者:  
我們很容易被漂亮的代碼吸引,也不知不覺的在自己的代碼庫中加入這些。卻沒有冷靜的想過它們的優(yōu)劣。這不,我就收集了一系列形如 “是否為……?” 的判斷的boolean函數(shù)。
復(fù)制代碼 代碼如下:

isNull: function(a){
return a === null;
},
isUndefined: function(a){
return a === undefined;
},
isNumber: function(a){
return typeof a === 'number';
},
isString: function(a){
return typeof a === 'string';
},
isBoolean: function(a){
return typeof a === 'boolean';
},
isPrimitive: function(b){
var a = typeof b;
return !!(b === undefined || b === null || a == 'boolean' || a == 'number' || a == 'string');
},
isArray: function(a){
return proto_obj.toString.call(a) === '[object Array]';
},
isFunction: function(a){
return proto_obj.toString.call(a) === '[object Function]';
},
isPlainObject: function(o){
if (!o || o === win || o === doc || o === doc.body) {
return false;
}
return 'isPrototypeOf' in o && proto_obj.toString.call(o) === '[object Object]';
},
isWindow: function(o){
return o && typeof o === 'object' && 'setInterval' in o;
},
isEmptyObject: function(o){
for(var a in o) {
return false;
}
return true;
}

以上isXX系列中,isUndefined在類庫中用的最多。如判斷是否傳入了某個參數(shù),判斷對象是否擁有某個屬性等等。但這個函數(shù)是不必存在,我已將其移除。理由如下
1,isUndefined 與 使用全等(===)或typeof 多了一層函數(shù)調(diào)用。很明顯多一層函數(shù)調(diào)用比直接使用原生的運算符效率會低(雖然有些微不足道),但如果isUndefined調(diào)用次數(shù)很多如上萬次還是很明顯的。我曾經(jīng)在郵箱框架中加入了該函數(shù),調(diào)用次數(shù)有4000多次,從性能分析工具看占用了近1%的時間。僅僅一個判斷占1%的調(diào)用時間還是很可怕的。當然,郵箱框架內(nèi)的isUndefined處在多層閉包的頂層,訪問其也會占用較多時間。如果這一條還不足以讓你放棄isUndefined,請看下面。
2,函數(shù)從一定程度上是對一些代碼的封裝,抽象。是組織良好代碼的方式之一,且有利于降低代碼的復(fù)雜性。但isNull/isUndefined/isBoolean/isNumber/isString函數(shù)內(nèi)僅有一句,抽象層次很低。因此完全不必封裝而提取出一個函數(shù)。
3,isUndefined(a) 與 a === undefined相比并不會節(jié)省幾個字節(jié)(呵,你可以命名的更短但損失了可讀性)。

綜上,我去掉了類庫中對基本類型判斷的isNull/isUndefined/isBoolean/isNumber/isString,需要用到這些判斷的時候直接使用typeof運算符等。

相關(guān)文章

  • 基于Typescript與Axios的接口請求管理詳解

    基于Typescript與Axios的接口請求管理詳解

    接口是一系列抽象方法的聲明,是一些方法特征的集合,這些方法都應(yīng)該是抽象的,需要由具體的類去實現(xiàn),然后第三方就可以通過這組抽象方法調(diào)用,讓具體的類執(zhí)行具體的方法,這篇文章主要給大家介紹了基于Typescript與Axios的接口請求管理的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • 淺談JS運算符&&和|| 及其優(yōu)先級

    淺談JS運算符&&和|| 及其優(yōu)先級

    下面小編就為大家?guī)硪黄獪\談JS運算符&&和|| 及其優(yōu)先級。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • TypeScript?Pinia實戰(zhàn)分享(Vuex和Pinia對比梳理總結(jié))

    TypeScript?Pinia實戰(zhàn)分享(Vuex和Pinia對比梳理總結(jié))

    這篇文章主要介紹了TypeScript?Pinia實戰(zhàn)分享(Vuex和Pinia對比梳理總結(jié)),今天我們再來實戰(zhàn)下官方推薦的新的vue狀態(tài)管理工具Pini,感興趣的小伙伴可以參考一下
    2022-06-06
  • 改變checkbox默認選中狀態(tài)及取值的實現(xiàn)代碼

    改變checkbox默認選中狀態(tài)及取值的實現(xiàn)代碼

    下面小編就為大家?guī)硪黄淖僣heckbox默認選中狀態(tài)及取值的實現(xiàn)代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • 原生js實現(xiàn)上傳圖片控件

    原生js實現(xiàn)上傳圖片控件

    這篇文章主要為大家詳細介紹了原生js實現(xiàn)上傳圖片控件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Bootstrap組件學習之導航、標簽、面包屑導航(精品)

    Bootstrap組件學習之導航、標簽、面包屑導航(精品)

    這篇文章主要介紹了Bootstrap組件學習之導航、標簽、面包屑導航(精品)的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • JavaScript實現(xiàn)頁面5秒后自動跳轉(zhuǎn)的方法

    JavaScript實現(xiàn)頁面5秒后自動跳轉(zhuǎn)的方法

    這篇文章主要介紹了JavaScript實現(xiàn)頁面5秒后自動跳轉(zhuǎn)的方法,涉及javascript遞歸調(diào)用與計時函數(shù)setTimeout的使用技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • JavaScript面試技巧之數(shù)組的一些不low操作

    JavaScript面試技巧之數(shù)組的一些不low操作

    這篇文章主要給大家介紹了關(guān)于JavaScript面試技巧之數(shù)組的一些不low操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用js具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • 詳解JS如何處理可視區(qū)域圖片懶加載技巧

    詳解JS如何處理可視區(qū)域圖片懶加載技巧

    這篇文章主要為大家介紹了JS如何處理可視區(qū)域圖片懶加載技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • JavaScript中常見的字符串操作函數(shù)及用法匯總

    JavaScript中常見的字符串操作函數(shù)及用法匯總

    這篇文章主要介紹了JavaScript中常見的字符串操作函數(shù)及用法,實例匯總了javascript常見的字符串轉(zhuǎn)換、分割、查詢、替換等技巧,非常具有實用價值,需要的朋友可以參考下
    2015-05-05

最新評論

宽城| 阳西县| 贡嘎县| 延安市| 青冈县| 西吉县| 二连浩特市| 临清市| 来安县| 吉林省| 云南省| 三穗县| 无棣县| 济源市| 建昌县| 广安市| 奈曼旗| 革吉县| 稷山县| 舞阳县| 阿克陶县| 蒙山县| 伽师县| 石楼县| 武汉市| 大姚县| 万全县| 潢川县| 图们市| 上犹县| 新安县| 建瓯市| 安乡县| 乌海市| 博客| 永德县| 阿克陶县| 清涧县| 金华市| 米泉市| 沈丘县|