js浅比较和深比较

1.浅比较
浅比较(即引用比较):在js中===是做浅比较,只检查左右两边对象是否是同一个对象的引用
2.深比较
深比较(原值相等):指检查两个对象的所有属性是否相等,深比较需要以递归的方式遍历两个对象的所有属性,操作比较耗时,深比较不管这两个对象是不是同一对象的引用。

// 深比较实现
// 判断obj是否为对象
function _isObj(obj) {
    return typeof obj === 'object' && obj !== null
}

function _deepCompare(obj1, obj2) {
    // 1.判断一个或者两个都不是对象
    if (!_isObj(obj1) || !_isObj(obj2)) {
        return obj1 === obj2;
    }

    // 2.同一个对象
    if (obj1 === obj2) {
        return true;
    }

    // 3.不是同一个对象 
    // Object.keys(obj) 一个表示给定对象的所有可枚举属性的字符串数组
    // 先判断键的数量
    // 3.1不一样
    if (Object.keys(obj1).length !== Object.keys(obj2).length) return false;
    // 3.2一样
    for (let key in obj1) {
        const res = _deepCompare(obj1[key], obj2[key])
        if (!res) return false
    }

    return true;

}

console.log(_deepCompare({ a: 1 }, { a: 1 }))
console.log(_deepCompare({ a: { a: 1, b: 1 } }, { a: { a: 1, b: 2 } }))
console.log(_deepCompare({ a: { a: 1 } }, { a: { a: 1, b: 2 } }))

参考文章:
https://zhuanlan.zhihu.com/p/256072182
https://blog.youkuaiyun.com/weixin_44685906/article/details/124698921

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值