思路其实是很清晰的, 比较对象类型, 不一致,直接返回false,一致,如果是数组或者对象类型,比较长度,长度不一样肯定也是返回false,长度一样,递归比较,其他基础类型理应返回true
const deepCompare = (obj1, obj2) => {
const type1 = Object.prototype.toString.call(obj1)
const type2 = Object.prototype.toString.call(obj2)
if (type1 !== type2) return false
if (type1 === '[object Object]') {
const len1 = Object.keys(obj1).length
const len2 = Object.keys(obj2).length
if (len1 !== len2) return false
for (const key in obj1) {
if (!deepCompare(obj1[key], obj2[key])) return false
}
} else if (type1 === '[object Array]') {
const len1 = obj1.length
const len2 = obj2.length
if (len1 !== len2) return false
for (const key in obj1) {
if (!deepCompare(obj1[key], obj2[key])) return false
}
} else if (type1 === '[object Function]') {
return true
} else {
return obj1 === obj2
}
return true
}