js 手写深比较

浅唱年华1920 / 2023-05-19 / 原文

 

function isObject(obj) {
  return typeof obj === 'object' && obj !== null
}
function isEqual(obj1, obj2) {
  if (!isObject(obj1) || !isObject(obj2)) {
    return obj1 === obj2;
  }

  if (obj1 === obj2) {
    return true;
  }

  let obj1keys = Object.keys(obj1);
  let obj2keys = Object.keys(obj2);

  if (obj1keys.length !== obj2keys.length) {
    return false;
  }

  for(let k in obj1) {
    const res = isEqual(obj1[k], obj2[k]);
    if (!res) {
      return false
    }
  }
  return true;
}