Deep Equal

function deepEqual(value1, value2) {
  if (value1 === value2) {
    return true;
  }

  if (
    typeof value1 !== "object" ||
    value1 === null ||
    typeof value2 !== "object" ||
    value2 === null
  ) {
    return false;
  }

  const keys1 = Object.keys(value1);
  const keys2 = Object.keys(value2);

  if (keys1.length !== keys2.length) {
    return false;
  }

  for (let key of keys1) {
    if (!keys2.includes(key) || !deepEqual(value1[key], value2[key])) {
      return false;
    }
  }

  return true;
}

console.log(deepEqual(42, 43)); // false
console.log(deepEqual(42, 42)); // true

console.log(deepEqual(true, false)); // false
console.log(deepEqual(false, false)); // true

console.log(deepEqual("Arjunan", "arjunan")); // false
console.log(deepEqual("Arjunan", "Arjunan")); // true

console.log(deepEqual({ a: 1 }, { b: 1 })); // false
console.log(deepEqual({ a: 1 }, { a: 1 })); // true

const a = { a: 1, b: 2, c: { d: 4, e: 5, f: { g: 6, h: 7 } } };
const b = a;
console.log(deepEqual(a, b)); // true