tyro-util
Version:
22 lines (20 loc) • 711 B
JavaScript
/**
* @desc 全等判断(在两个变量之间进行深度比较以确定它们是否全等)
* @param {} a
* @param {} b
* @return {Boolean}
*
* eg.
* equals({ a: [2, { e: 3 }], b: [4], c: 'foo' }, { a: [2, { e: 3 }], b: [4], c: 'foo' }); // true
*/
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
let keys = Object.keys(a)
if (keys.length !== Object.keys(b).length) return false
return keys.every(k => equals(a[k], b[k]))
}
module.exports = equals