// 判断是否是对象
function isObject (obj) {
return typeof obj === 'object' && obj !== null
}
// 判断是否全相等
function isEqual (obj1, obj2) {
// 首先判断是否是对象,值类型可以直接比较
if (!isObject(obj1) || !isObject(obj2)) {
return obj1 === obj2
}
// 1.直接比较内存地址
if (obj1 === obj2) return true
// 若内存地址不相同,则进行深度比较
// 2.比较key个数
const obj1Keys = Object.keys(obj1)
const obj2Keys = Object.keys(obj2)
if (obj1Keys.length !== obj2Keys.length) return false
// 3.个数相同,以obj1为基准,递归比较
for (let key in obj1) {
const res = isEqual(obj1[key], obj2[key])
if (!res) return false
}
// 4.满足以上条件,全相等
return true
}
isEqual的模拟实现
于 2022-02-18 16:23:13 首次发布