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

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

源代码code

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))
相关文章
相关标签/搜索