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

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

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

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的結果,因此用正則進行格式化
};
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

相關文章

最新評論

富锦市| 鄯善县| 合水县| 平安县| 吉安市| 濮阳市| 拉孜县| 普定县| 浏阳市| 慈利县| 松潘县| 永德县| 英德市| 宁化县| 长治县| 二连浩特市| 黑河市| 岳普湖县| 新郑市| 陆河县| 祁阳县| 汕尾市| 逊克县| 宜君县| 通江县| 舞阳县| 上杭县| 鄂伦春自治旗| 和平区| 游戏| 凯里市| 农安县| 乐昌市| 利辛县| 双桥区| 舒城县| 长葛市| 施秉县| 外汇| 长丰县| 科尔|