如何在 JavaScript 中比较两个对象

在这里插入图片描述

比较方法

使用 == 或 === 对两个不同却具有相同属性及属性值的对象进行比较,他们的结果却不会相等。这是因为等号比较的是他们的引用(内存地址),而不是基本类型
为了测试两个对象在结构上是否相等,需要一个辅助函数。 他将遍历每个对象的所有属性,然后测试他们是否具有相同的值,嵌套对象也需如此。当然,也可以使用参数来控制是否对原型链进行比较

注意:此代码只对普通对象、数组、函数、日期和基本类型的数据结构进行对比

function isDeepEqual(obj1, obj2, testPrototypes = false) {
        if (obj1 === obj2) {
          return true
        }
        if (typeof obj1 === 'function' && typeof obj2 === 'function') {
          return obj1.toString() === obj2.toString()
        }
        if (obj1 instanceof Date && obj2 instanceof Date) {
          return obj1.getTime() === obj2.getTime()
        }
        if (Object.prototype.toString.call(obj1) !== Object.prototype.toString.call(obj2) && typeof obj1 !== 'object') {
          return false
        }
        const newB = testPrototypes ? isDeepEqual(Object.getPrototypeOf(obj1), Object.getPrototypeOf(obj2), true) : true
        const obj1Props = Object.getOwnPropertyNames(obj1)
        const obj2Props = Object.getOwnPropertyNames(obj2)
        return (
          obj1Props.length === obj2Props.length && newB && obj1Props.every(item => isDeepEqual(obj1[item], obj2[item]))
        )
      }
  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值