亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

js中判斷Object、Array、Function等引用類型對象是否相等

 更新時間:2012年08月29日 00:14:10   作者:  
項(xiàng)目中有時會需要對引用類型進(jìn)行比較,如常見的object和array,我們知道,引用類型無法直接使用 == 或=== 取得期待結(jié)果,因此需要一個迭代的compare函數(shù)轉(zhuǎn)化成原始類型進(jìn)行比較
在迭代中,我們還要注意的是,對象或者數(shù)組中的元素可能是一個任意值——除了原始類型值、object、arrray外,這個值還可能是一個方法、一個DOM對象或者window對象,可能你已經(jīng)注意到了,有部分引用類型是不能進(jìn)行迭代的,需要分支判斷,代碼如下:
復(fù)制代碼 代碼如下:

function compare(a,b){
var
pt = /undefined|number|string|boolean/,
fn = /^(function\s*)(\w*\b)/,
cr = "constructor",
cn = "childNodes",
pn = "parentNode",
ce = arguments.callee;
if(pt.test(typeof a) || pt.test(typeof b) || a === null || b === null){
return a === b || (isNaN(a) && isNaN(b)); //為了方便,此處假定NaN == NaN
}
if(a[cr] !== b[cr]){
return false;
}
switch(a[cr]){
case Date : {
return a.valueOf() === b.valueOf();
};
case Function : {
return a.toString().replace(fn,'$1') === b.toString().replace(fn,'$1'); //硬編碼中聲明函數(shù)的方式會影響到toString的結(jié)果,因此用正則進(jìn)行格式化
};
case Array : {
if(a.length !== b.length){
return false;
}
for(var i=0;i<a.length;i++){
if(!ce(a[i],b[i])){
return false;
}
}
break;
};
default : {
var alen = 0, blen = 0, d;
if(a === b){
return true;
}
if(a[cn] || a[pn] || b[cn] || b[pn]){
return a === b;
}
for(d in a){
alen++ ;
}
for(d in b){
blen++;
}
if(alen !== blen){
return false;
}
for(d in a){
if(!ce(a[d],b[d])){
return false;
}
}
break;
};
}
return true;
}
console.log(compare({},{a:1})); //false
console.log(compare({a:1},{b:2})); //false
console.log(compare({b:2,a:1},{a:1,b:2})); //true
console.log(compare({a:function(){return false;},b:2},{a:function(){return false;},b:2})); //true
console.log(compare([],[])); //true
console.log(compare([2,1],[1,2])); //false
console.log(compare(function(){alert(1)},function(){})); //false
console.log(compare(function aaa(){alert(1)},function(){alert(1)})); //true
console.log(compare(document.getElementsByTagName("a")[0],document.getElementsByTagName("a")[1])); //false
console.log(compare(document.getElementsByTagName("a")[0],document.getElementsByTagName("a")[0])); //true

相關(guān)文章

  • JavaScript設(shè)計(jì)模式組合設(shè)計(jì)模式案例

    JavaScript設(shè)計(jì)模式組合設(shè)計(jì)模式案例

    這篇文章主要介紹了JavaScript設(shè)計(jì)模式組合設(shè)計(jì)模式案例,組合設(shè)計(jì)模式是用于將多個部分通過組合的方式行成一個整體,更多相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2022-06-06
  • JavaScript實(shí)現(xiàn)正則去除a標(biāo)簽并保留內(nèi)容的方法【測試可用】

    JavaScript實(shí)現(xiàn)正則去除a標(biāo)簽并保留內(nèi)容的方法【測試可用】

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)正則去除a標(biāo)簽并保留內(nèi)容的方法,結(jié)合實(shí)例形式詳細(xì)分析了javascript針對a標(biāo)簽及span標(biāo)簽的正則匹配相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • 微信小程序使用canvas的畫圖操作示例

    微信小程序使用canvas的畫圖操作示例

    這篇文章主要介紹了微信小程序使用canvas的畫圖操作,結(jié)合實(shí)例形式較為詳細(xì)的分析了微信小城序基于canvas的畫圖操作相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2019-01-01
  • JavaScript 常用函數(shù)庫詳解

    JavaScript 常用函數(shù)庫詳解

    在WEB開發(fā)中,javascript提供了許多函數(shù)供開發(fā)人員使用,這些函數(shù)在Ajax流行前足夠了,但要構(gòu)建一個交互性強(qiáng)些的應(yīng)用恐怕就麻煩了。
    2009-10-10
  • NestJs 靜態(tài)目錄配置詳解

    NestJs 靜態(tài)目錄配置詳解

    這篇文章主要介紹了NestJs 靜態(tài)目錄配置,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • bootstrap導(dǎo)航條實(shí)現(xiàn)代碼

    bootstrap導(dǎo)航條實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了bootstrap導(dǎo)航條的實(shí)現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • javascript實(shí)現(xiàn)的固定位置懸浮窗口實(shí)例

    javascript實(shí)現(xiàn)的固定位置懸浮窗口實(shí)例

    這篇文章主要介紹了javascript實(shí)現(xiàn)的固定位置懸浮窗口,以一個完整實(shí)例形式詳細(xì)分析了javascript實(shí)現(xiàn)固定位置懸浮窗口的相關(guān)技巧,非常具有實(shí)用價值,需要的朋友可以參考下
    2015-04-04
  • 微信小程序簽到功能

    微信小程序簽到功能

    這篇文章主要為大家詳細(xì)介紹了微信小程序簽到功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • JavaScript之不可靠的undefined

    JavaScript之不可靠的undefined

    這篇文章主要介紹了JavaScript之不可靠的undefined,想深入JS的同學(xué),可以參考下
    2021-05-05
  • Webpack4 使用Babel處理ES6語法的方法示例

    Webpack4 使用Babel處理ES6語法的方法示例

    這篇文章主要介紹了Webpack4 使用Babel處理ES6語法的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03

最新評論