深度比较两个对象是否相等

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 数量比较作为快速失败。