1.浅比较
浅比较(即引用比较):在js中===是做浅比较,只检查左右两边对象是否是同一个对象的引用
2.深比较
深比较(原值相等):指检查两个对象的所有属性是否相等,深比较需要以递归的方式遍历两个对象的所有属性,操作比较耗时,深比较不管这两个对象是不是同一对象的引用。
// 深比较实现
// 判断obj是否为对象
function _isObj(obj) {
return typeof obj === 'object' && obj !== null
}
function _deepCompare(obj1, obj2) {
// 1.判断一个或者两个都不是对象
if (!_isObj(obj1) || !_isObj(obj2)) {
return obj1 === obj2;
}
// 2.同一个对象
if (obj1 === obj2) {
return true;
}
// 3.不是同一个对象
// Object.keys(obj) 一个表示给定对象的所有可枚举属性的字符串数组
// 先判断键的数量
// 3.1不一样
if (Object.keys(obj1).length !== Object.keys(obj2).length) return false;
// 3.2一样
for (let key in obj1) {
const res = _deepCompare(obj1[key], obj2[key])
if (!res) return false
}
return true;
}
console.log(_deepCompare({ a: 1 }, { a: 1 }))
console.log(_deepCompare({ a: { a: 1, b: 1 } }, { a: { a: 1, b: 2 } }))
console.log(_deepCompare({ a: { a: 1 } }, { a: { a: 1, b: 2 } }))
参考文章:
https://zhuanlan.zhihu.com/p/256072182
https://blog.csdn.net/weixin_44685906/article/details/124698921