別了 JavaScript中的isXX系列
更新時(shí)間:2012年08月01日 22:38:29 作者:
我們很容易被漂亮的代碼吸引,也不知不覺(jué)的在自己的代碼庫(kù)中加入這些。卻沒(méi)有冷靜的想過(guò)它們的優(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在類(lèi)庫(kù)中用的最多。如判斷是否傳入了某個(gè)參數(shù),判斷對(duì)象是否擁有某個(gè)屬性等等。但這個(gè)函數(shù)是不必存在,我已將其移除。理由如下
1,isUndefined 與 使用全等(===)或typeof 多了一層函數(shù)調(diào)用。很明顯多一層函數(shù)調(diào)用比直接使用原生的運(yùn)算符效率會(huì)低(雖然有些微不足道),但如果isUndefined調(diào)用次數(shù)很多如上萬(wàn)次還是很明顯的。我曾經(jīng)在郵箱框架中加入了該函數(shù),調(diào)用次數(shù)有4000多次,從性能分析工具看占用了近1%的時(shí)間。僅僅一個(gè)判斷占1%的調(diào)用時(shí)間還是很可怕的。當(dāng)然,郵箱框架內(nèi)的isUndefined處在多層閉包的頂層,訪問(wèn)其也會(huì)占用較多時(shí)間。如果這一條還不足以讓你放棄isUndefined,請(qǐng)看下面。
2,函數(shù)從一定程度上是對(duì)一些代碼的封裝,抽象。是組織良好代碼的方式之一,且有利于降低代碼的復(fù)雜性。但isNull/isUndefined/isBoolean/isNumber/isString函數(shù)內(nèi)僅有一句,抽象層次很低。因此完全不必封裝而提取出一個(gè)函數(shù)。
3,isUndefined(a) 與 a === undefined相比并不會(huì)節(jié)省幾個(gè)字節(jié)(呵,你可以命名的更短但損失了可讀性)。
綜上,我去掉了類(lèi)庫(kù)中對(duì)基本類(lèi)型判斷的isNull/isUndefined/isBoolean/isNumber/isString,需要用到這些判斷的時(shí)候直接使用typeof運(yùn)算符等。
相關(guān)文章
JavaScript監(jiān)聽(tīng)觸摸事件代碼實(shí)例
這篇文章主要介紹了JavaScript監(jiān)聽(tīng)觸摸事件代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
javascript內(nèi)嵌式與外鏈?zhǔn)降幕緫?yīng)用方式
這篇文章主要介紹了javascript內(nèi)嵌式與外鏈?zhǔn)降幕緫?yīng)用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
ES6學(xué)習(xí)筆記之Set和Map數(shù)據(jù)結(jié)構(gòu)詳解
這篇文章主要介紹了ES6學(xué)習(xí)筆記之Set和Map數(shù)據(jù)結(jié)構(gòu),結(jié)合實(shí)例形式詳細(xì)分析了ECMAScript中基本數(shù)據(jù)結(jié)構(gòu)Set和Map的常用屬性與方法的功能、用法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-04-04
javaScript在表單提交時(shí)獲取表單數(shù)據(jù)的示例代碼
本文介紹了五種在JavaScript中獲取表單數(shù)據(jù)的方法:使用FormData對(duì)象、手動(dòng)提取表單數(shù)據(jù)、使用querySelector獲取單個(gè)字段數(shù)據(jù)、序列化為查詢(xún)字符串和配合AJAX提交表單數(shù)據(jù),每種方法都有示例代碼,幫助開(kāi)發(fā)者更好地理解和應(yīng)用2025-02-02
javascript實(shí)現(xiàn)簡(jiǎn)單放大鏡效果
這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)簡(jiǎn)單放大鏡效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
uniapp內(nèi)置組件scroll-view案例詳解(完整代碼)
這篇文章主要介紹了uniapp內(nèi)置組件scroll-view案例詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-07-07
一個(gè)級(jí)聯(lián)菜單代碼學(xué)習(xí)及removeClass與addClass的應(yīng)用
最近在學(xué)些web前段的知識(shí),看見(jiàn)博客園首頁(yè)左側(cè)的一個(gè)級(jí)聯(lián)菜單,很是好奇,于是想自己實(shí)現(xiàn)以下,代碼書(shū)寫(xiě)很簡(jiǎn)潔而且易懂,感興趣的朋友可以了解下,希望本文對(duì)你學(xué)習(xí)級(jí)聯(lián)菜單有所幫助2013-01-01
JavaScript 組件之旅(四):測(cè)試 JavaScript 組件
本期,我們要討論的話題是 JavaScript 的測(cè)試,以檢查組件的狀態(tài)和工作方式是否符合預(yù)期,還會(huì)介紹一個(gè)可以方便編寫(xiě)測(cè)試用例的測(cè)試方法。這里說(shuō)的測(cè)試當(dāng)然是使用自動(dòng)化的測(cè)試手段,這是軟件質(zhì)量保證(QA)的重要環(huán)節(jié)。2009-10-10

