# 浅比较与深比较
# 浅比较
浅比较也叫应用相等。在 js 中 ===
是做浅比较,只检查两个对象是否指向同一个引用。
const a = { x: 1 }
const b = { x: 1 }
console.log(a === b) // false
此时的 a 和 b 指向不同的对象引用,打印值为 false
const a = { x: 1 }
const b = a
console.log(a === b) // true
此时的 a 和 b 指向的是同一对象的引用,打印值为 true
# 深比较
深比较会检查两个对象所有的属性是否都相等,需要用递归的方式遍历两个对象的所有属性,不管对象是不是同一对象的引用。
var deepEqual = function (x, y) {
if (x === y) {
return true
}
if (
typeof x === 'object' &&
x != null &&
typeof y === 'object' &&
y != null
) {
// 属性数量不一样
if (Object.keys(x).length !== Object.keys(y).length) {
return false
}
for (let prop in x) {
if (y.hasOwnProperty(prop)) {
if (!deepEqual(x[prop], y[prop])) {
return false
}
} else {
return false
}
}
return true
} else {
// 不是对象且不满足 ===,直接返回 false
return false
}
}