javascript 判断对象的值是否相等

 经常要判断两个对象的值是否相等 ,写了个方法用来比较,和对象深层copy的思路有点像,都是将对象进行类型判断 然后操作 。记录下。

 1 function compareobj(A,B){
 2                 if(A instanceof Array){
 3                     if(!(B instanceof Array)){
 4                         return false;
 5                     }
 6                     var aLen = A.length,
 7                         bLen = B.length;
 8                     if(aLen != bLen){
 9                         return false;
10                     }
11                     var isEqual = true,num = 0;
12                     for(var i = 0;i < aLen;i++){
13                         if(A[i]!=B[i] && typeof A[i]=='object' && typeof B[i]=='object'){
14                           isEqual = arguments.callee.apply(null,[A[i],B[i]]);
15                           //isEqual = compareobj(A[i],B[i]);
16                         }else{
17                           isEqual = A[i]===B[i];
18                         }
19                         if(isEqual){
20                             num++;
21                         }
22                     }
23                     if(num != aLen){
24                         return false;
25                     }else{
26                         return true;
27                     }
28                 }else if(A instanceof Date){
29                     if(!(B instanceof Date)){
30                         return false;
31                     }else{
32                         return A.getTime() == B.getTime();
33                     }
34                 }else if(A instanceof Object){
35                     if((B instanceof Array) || (B instanceof Date) || !(B instanceof Object)){
36                         return false;
37                     }else{
38                        var aLen=bLen=0;
39                        for(var i in A){
40                             aLen++;
41                        }
42                        for(var i in B){
43                             bLen++;
44                        }
45                        if(aLen != bLen){
46                             return false;
47                        }
48                        var isEqual = true,num = 0;
49                        for(var i in A){
50                          if(typeof A[i] == 'object' && typeof B[i] == 'object' && A[i]!=B[i]){
51                             isEqual = arguments.callee.apply(null,[A[i],B[i]]);
52                            // isEqual = compareobj(A[i],B[i]);
53                          }else{
54                             isEqual = A[i]===B[i];
55                          }
56                          if(isEqual){
57                             num++;
58                          }
59                        }
60                        if(num != aLen){
61                             return false;
62                        }else{
63                             return true;
64                        }
65                     }
66                 }else{
67                     if(B instanceof Object){
68                         return false;
69                     }else{
70                         return A===B;
71                     }
72                 }
73             }

转载于:https://www.cnblogs.com/lmh2072005/archive/2012/08/02/2619903.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值