资讯专栏INFORMATION COLUMN

判断两个对象的值是否相等

Cruise_Chan / 3238人阅读

摘要:判断两个对象的值是否相等源代码如果数据类型不相等,则返回如果数据类型相等,再根据不同数据类型分别判断样例

判断两个对象的值是否相等

源代码

function isEqual (a, b) {
  const classNameA = toString.call(a)
  const classNameB = toString.call(b)
  // 如果数据类型不相等,则返回false
  if (classNameA !== classNameB) {
    return false
  } else {
    // 如果数据类型相等,再根据不同数据类型分别判断
    if (classNameA === "[object Object]") {
      for (let key in a) {
        if (!isEqual(a[key], b[key])) return false
      }
      for (let key in b) {
        if (!isEqual(a[key], b[key])) return false
      }
      return true
    } else if (classNameA === "[object Array]") {
      if (a.length !== b.length) {
        return false
      } else {
        for (let i = 0, len = a.length; i < len; i++) {
          if (!isEqual(a[i], b[i])) return false
        }
        return true
      }
    } else if (classNameA === "[object Function]") {
      return a.toString() === b.toString()
    } else {
      return Object.is(a, b)
    }
  }
}

样例

const a = {
  arr: [1, true, {a: 6, arr: [9, 0, 6, [5, 9]]}],
  d: 0,
  obj: { d: 9, arr: [5000]},
  e: ()=>{},
  f: [0]
}

const b = {
  arr: [1, true, {a: 6, arr: [9, 0, 6, [5, 9]]}],
  d: 0,
  obj: { d: 9, arr: [5000]},
  e: ()=>{},
  f: [0]
}

console.log(isEqual(a, b))

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/94830.html

相关文章

  • 数据类型转换、==和===的判断

    不同数据类型做比较的时候,都需要进行数据类型的转换!本文介绍常见数据类型转换的方法,相等和严格相等的判断规律 一、其他类型转换成布尔类型 1、使用场景: 对于括号里的表达式,会被强制转换为布尔类型 if () { console.log(empty) } 2、转换规则 类型 结果 Undefined false Null false Number +0, −0, 或者 N...

    MASAILA 评论0 收藏0
  • 【重温基础】18.相等判断

    摘要:通常在转换不同数据类型时,相等和不相等会遵循以下规则若有一个操作数是布尔值,则比较前会将布尔值转换为数值转为,转为。 本文是 重温基础 系列文章的第十八篇。今日感受:优化自己的代码,也是很愉快的事情。 系列目录: 【复习资料】ES6/ES7/ES8/ES9资料整理(个人整理) 【重温基础】1-14篇 【重温基础】15.JS对象介绍 【重温基础】16.JSON对象介绍 【重温基础...

    赵春朋 评论0 收藏0
  • JavaScript疑难杂症系列-相等判断

    摘要:同一类的复合类型值两个复合类型对象数组函数的数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个对象。宽松相等双等号将执行类型转换原始类型的值原始类型的数据会转换成数值类型再进行比较。 事件这块知识点虽然是老生长谈的,但对于我来说多多整理,多多感悟,温故知新,每次看看这块都有不同的收获.(在这里我不会长篇大论,只会挑重点;具体的小伙伴们自行查找)参考:https://dev...

    Flink_China 评论0 收藏0
  • JavaScript疑难杂症系列-相等判断

    摘要:同一类的复合类型值两个复合类型对象数组函数的数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个对象。宽松相等双等号将执行类型转换原始类型的值原始类型的数据会转换成数值类型再进行比较。 事件这块知识点虽然是老生长谈的,但对于我来说多多整理,多多感悟,温故知新,每次看看这块都有不同的收获.(在这里我不会长篇大论,只会挑重点;具体的小伙伴们自行查找)参考:https://dev...

    2bdenny 评论0 收藏0

发表评论

0条评论

Cruise_Chan

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<