const equals = (a,b) =>{
if(a===b) return true;
if(a instanceof Date && b instanceof Date){
return a.getTime() === b.getTime()
}
if(!a || !b || (typeof a !== 'object' && typeof b!== 'object'))
return a === b
if(a.prototype !== b.prototype)
return false;
const keys = Object.keys(a)
if(keys.length !== Object.keys(b).length)
return false
return keys.every(k => equals(a[k],b[k]));
}
const a = { name: 'John', age: 26 };
const b = { name: 'John', age: 26 };
equals(a, b); // true
const c = { name: 'John' };
const d = { name: 'John', age: undefined };
equals(c, d); // false