深度比较两个对象是否相等
function isEqual(obj1, obj2) {
if (!(obj1 instanceof Object) || !(obj2 instanceof Object)) {
return obj1 === obj2;
}
if (Object.keys(obj1).length !== Object.keys(obj2).length) {
return false;
}
for (const key in obj1) {
if (Object.prototype.hasOwnProperty.call(obj1, key)) {
if (!Object.prototype.hasOwnProperty.call(obj2, key)) return false;
if (obj1[key] instanceof Object && obj2[key] instanceof Object) {
if (!isEqual(obj1[key], obj2[key])) return false;
} else if (obj1[key] !== obj2[key]) {
return false;
}
}
}
return true;
}
补充
补充:原实现里写成了
return isEqual;(返回函数引用),这里改为return isEqual(obj1[key], obj2[key])真正递归;同时补上一个 key 数量比较作为快速失败。



