• 设为首页
  • 加入收藏
  • 汇款方式
  • 留言反馈
  • 网站首页
  • 关于我们
  • 网站建设
  • 网站托管
  • 网站推广
  • 微信网站
  • 速达软件
  • 成功案例
  • 后续服务
  • 在线留言
  • 联系我们
快速服务导航
  • 网站建设
  • 网站推广
  • 网站托管
  • 财务软件
  • 客户服务
  • 经济型网站建设套餐
  • 基本型网站建设套餐
  • 标准型网站建设套餐
  • 品牌型网站建设套餐
临沂进销存软件
建站知识
您现在的位置: 首页 >> 建站知识

js中判断Object、Array、Function等引用类型对象是否相等

添加时间:2012-12-30

项目中有时会需要对引用类型进行比较,如常见的object和array,我们知道,引用类型无法直接使用 == 或=== 取得期待结果,因此需要一个迭代的compare函数转化成原始类型进行比较。临沂网站建设在迭代中,我们还要注意的是,对象或者数组中的元素可能是一个任意值——除了原始类型值、object、arrray外,这个值还可能是一个方法、一个DOM对象或者window对象,可能你已经注意到了,有部分引用类型是不能进行迭代的,需要分支判断,代码如下: 

代码如下:

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’); //硬编码中声明函数的方式会影响到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  

本文摘自:http://www.ly333.net/new_show.asp?id=779

浏览次数:2335


上一条:c语言中时间陷阱的实现-上海网站建设
下一条:网页设计之视觉信息传达分析
  • 返回首页
  • 关于我们
  • 汇款方式
  • 留言反馈
  • 联系我们
  • 临沂软件公司
版权所有 Copyright @ 2006 临沂三人行网络 All Rights reserved 鲁ICP备11032993号-1
联系地址:临沂市兰山区临西五路与北园路交汇处优卡空间B座509 临沂三人行网络科技公司 邮编:276000
咨询专线:0539-7322544     业务总监:13954495915
商务一部:0539-7322401 咨询QQ:858823118
商务二部:0539-7322402 咨询QQ:346917770
 商务三部:0539-7322403 咨询QQ:1737388890
监督电话:13954495915    EMAIL:w7169322@163.com
网站关键词: 临沂网站建设|临沂网站制作|临沂网络公司|临沂网站改版|临沂网站托管|临沂三人行网络  网站地图