-
浅相等(Shallow Equality): 检查对象的引用是否相同。
const obj1 = { a: 1, b: 2 }; const obj2 = { a: 1, b: 2 }; console.log(obj1 === obj2); // false,因为它们引用不同
-
深相等(Deep Equality): 检查对象的值是否相同,递归检查嵌套对象。
-
使用库(如 Lodash): Lodash 提供了
isEqual
方法。const _ = require('lodash'); const obj1 = { a: 1, b: { c: 2 } }; const obj2 = { a: 1, b: { c: 2 } }; console.log(_.isEqual(obj1, obj2)); // true
-
自定义递归比较: 自己实现递归比较对象的属性。
function deepEqual(obj1, obj2) { if (obj1 === obj2) return true; if (typeof obj1 !== 'object' || obj1 === null || typeof obj2 !== 'object' || obj2 === null) { return false; } // 获取对象的所有属性,包括可枚举和不可枚举的 const keys1 = Reflect.ownKeys(obj1); const keys2 = Reflect.ownKeys(obj2); if (keys1.length !== keys2.length) return false; for (let key of keys1) { if (!keys2.includes(key) || !deepEqual(obj1[key], obj2[key])) { return false; } } return true; } // 示例使用: const obj1 = { a: 1, b: { c: 2 } }; const obj2 = { a: 1, b: { c: 2 } }; const obj3 = { a: 1, b: { c: 3 } }; console.log(deepEqual(obj1, obj2)); // true console.log(deepEqual(obj1, obj3)); // false
-
选择哪种方式取决于你对相等的定义,如果仅仅关心引用相等,则使用浅相等;如果需要比较对象的结构和值,则使用深相等。