背景

js如何比较两个对象的值

徐徐
前端
发表于 2025-04-15 16:00:00
🌺 摘要
js如何比较两个对象的值

js如何比较两个对象的值

1.手动递归比较

function deepEqual(obj1, obj2) {
  // 1. 处理基本类型或 null/undefined
  if (obj1 === obj2) return true;

  // 2. 检查类型是否一致
  if (
    typeof obj1 !== "object" ||
    obj1 === null ||
    typeof obj2 !== "object" ||
    obj2 === null
  ) {
    return false;
  }

  // 3. 比较对象的键数量
  const keys1 = Object.keys(obj1);
  const keys2 = Object.keys(obj2);
  if (keys1.length !== keys2.length) return false;

  // 4. 递归比较每个属性
  for (const key of keys1) {
    if (!keys2.includes(key) || !deepEqual(obj1[key], obj2[key])) {
      return false;
    }
  }

  return true;
}

// 示例
const objA = { a: 1, b: { c: 2 } };
const objB = { a: 1, b: { c: 2 } };
console.log(deepEqual(objA, objB)); // true

2.JSON.stringify

function shallowCompare(obj1, obj2) {
  return JSON.stringify(obj1) === JSON.stringify(obj2);
}
// 示例
console.log(shallowCompare({ a: 1 }, { a: 1 })); // true

局限性

  • 无法处理函数、undefined、Symbol 等特殊属性
  • 属性顺序不同会导致误判(如
 {a:1, b:2} 和 {b:2, a:1})
  • 循环引用会报错(如 obj.self = obj)。

3.用插件

const _ = require("lodash");
console.log(_.isEqual(objA, objB)); // true
文章发表于 2025-04-15 16:00:00
作者:徐徐
转载请注明出处
上一篇:gulp打包样式
下一篇:js包装类型