deepequal js实现
深度比较(DeepEqual)的 JavaScript 实现
深度比较(DeepEqual)用于递归比较两个对象或数组的结构和值是否完全一致。以下是几种实现方法:

方法一:递归实现基础版本
function deepEqual(obj1, obj2) {
if (obj1 === obj2) return true;
if (typeof obj1 !== 'object' || obj1 === null || typeof obj2 !== 'object' || obj2 === null) {
return false;
}
const keys1 = Object.keys(obj1);
const keys2 = Object.keys(obj2);
if (keys1.length !== keys2.length) return false;
for (const key of keys1) {
if (!keys2.includes(key)) return false;
if (!deepEqual(obj1[key], obj2[key])) return false;
}
return true;
}
方法二:处理特殊类型(日期、正则表达式等)
function deepEqual(obj1, obj2) {
if (obj1 === obj2) return true;
if (obj1 instanceof Date && obj2 instanceof Date) {
return obj1.getTime() === obj2.getTime();
}
if (obj1 instanceof RegExp && obj2 instanceof RegExp) {
return obj1.toString() === obj2.toString();
}
if (typeof obj1 !== 'object' || obj1 === null || typeof obj2 !== 'object' || obj2 === null) {
return false;
}
const keys1 = Object.keys(obj1);
const keys2 = Object.keys(obj2);
if (keys1.length !== keys2.length) return false;
for (const key of keys1) {
if (!keys2.includes(key)) return false;
if (!deepEqual(obj1[key], obj2[key])) return false;
}
return true;
}
方法三:使用现成库(推荐)
许多成熟的库已实现深度比较功能,例如 Lodash 的 _.isEqual:

const _ = require('lodash');
const result = _.isEqual(obj1, obj2);
或者使用 fast-deep-equal 库:
const deepEqual = require('fast-deep-equal');
const result = deepEqual(obj1, obj2);
注意事项
- 循环引用会导致递归版本堆栈溢出,需额外处理。
- 生产环境建议使用经过优化的库(如 Lodash 或
fast-deep-equal)。 - 对原型链属性的比较需根据需求调整(上述代码未比较原型链)。






