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.csdn.net/weixin_44685906/article/details/124698921

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript中,拷贝是指只拷贝了对象的一层内容,而引用类型的层次数据仍然共享内存地址。简单来说,拷贝只是拷贝了对象的外层,而没有完全拷贝整个对象的内容。 举个例子,如果有一个数组里面包含了另一个数组或对象,拷贝只会拷贝外层的数组,而层次的数组或对象仍然是共享内存地址的。 在JavaScript中,有一些常见的拷贝方法,比如使用Object.assign()方法可以将一个对象的属性拷贝到另一个对象中。通过Object.assign()方法,我们可以将源对象的属性拷贝到目标对象中。对于目标对象的已有属性,如果与源对象中的属性重复,那么源对象的属性会覆盖目标对象的属性值。 综上所述,拷贝只是拷贝了对象的一层内容,并不能改变对象的地址,所以层次的引用类型仍然是共享内存地址的。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [JS拷贝和拷贝](https://blog.csdn.net/baidu_33438652/article/details/124219924)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [js拷贝和拷贝](https://blog.csdn.net/weixin_57660141/article/details/126060089)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值