JS判断两个对象是否相等

① 方法一:通过JSON.stringify(obj)来判断两个对象转后的字符串是否相等

优点:用法简单,对于顺序相同的两个对象可以快速进行比较得到结果
缺点:这种方法有限制就是当两个对比的对象中key的顺序不是完全相同时会比较出错

② 方法二:有递归的情况 ,对象里包含 对象 和 数组 

 function equals(a, b) {
        let ArrayA = Object.getOwnPropertyNames(a)
        let ArrayB = Object.getOwnPropertyNames(b)
     

        if (ArrayA.length != ArrayB.length) return false
        console.log(a)
        for (let i = 0; i < ArrayA.length; i++) {
            let propNameA = ArrayA[i]
            let propNameB = ArrayB[i]
          
            if (!a.hasOwnProperty(propNameB)) return false;

            if(a instanceof Object){
                if(equals(a[propNameA],b[propNameA])){

                }else{ return false; }
            }else{
                if (a[propNameA]===b[propNameA]) {
                    
                }else{
                    return false;
                }
            }
            
            return true;

步骤: 1. 判断对象属性的长度是否一致

            2.for循环,判断A对象里是否包含B的属性

            3.然后判断 A对象的属性是否是 对象属性,如果是,再调用一次本函数

             4.判断A的属性值是否等于B的属性值   

tip: 这里提示下:

1. keys()  输出为一个数组,取到的是 obj 的所有的自身可枚举属性。其功能和for in + hasOwnProperty()功能是一致的
2. getOwnPropertyNames() 输出为一个数组,取到的是 obj 的所有自身属性。(可枚举、不可枚举,但不包括symbol类型的属性)
3. getOwnPropertySymbol()  输出为一个数组,取到的是 obj 的所有自身的Symbol属性
4. for(key in obj)  遍历 obj 的所有属性,包括自身属性和原型上的所有可枚举的属性
5. JSON.stringify()  只能将自身的可枚举的属性转化成字符串

一般遍历的都是可枚举属性,且不包括Symbol,除了getOwnPropertyNames()。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值