Skip to content

对象

更新: 2025/3/18 14:37:35 字数: 0 字

一、比较对象是否相等

  • JSON.stringify()
    缺点:
    对象中的属性必须以 ASCII 码进行排序;
    无法比较包含日期或者函数对象的值;
    在出现循环引用和对象顺序不一样的情况下,判断失败;

  • Object.is()
    原理:比较方式和 == 和 === 号的比较方式一致
    缺点: 如果对象中包含对象/数组,比较不精准;

  • 递归比较

js
// 比较两个对象是否相等
function areEqual(obj1, obj2) {
  let len_obj1 = Object.keys(obj1).length
  let len_obj2 = Object.keys(obj2).length
  // 1. 比较属性个数
  if (len_obj1 !== len_obj2) {
    return false;
  }
  // 2. 比较属性值
  for (let key in obj1) {
    // 比较下标
    if (obj1.hasOwnProperty(key) !== obj2.hasOwnProperty(key)) {
      return false;
    }
    // 比较内容
    if (typeof obj1[key] !== typeof obj2[key]) {
      return false;
    }
    // 子元素
    if (typeof obj1[key] === 'object' && typeof obj2[key] === 'object') {
      if (!areEqual(obj1[key], obj2[key])) {
        return false;
      }
    } else if (obj1[key] !== obj2[key]) {
      return false;
    }
  }
  return true;
}

二、判断对象是否为空

三、对象深拷贝

道友再会.