// 是不是对象
function isObject(obj) {
return typeof obj === "object" || obj !== null;
}
// 深度比较
function isEqual(obj1, obj2){
if (!isObject(obj1) || !isObject(obj2)) {
// 值类型,(注意,参与equal的一般不会是函数)
return obj1 === obj2;
}
if (obj1 === obj2) {
return true;
}
// 两个都是对象或数组,且不相等
// 1、先取出obj1 和 obj2 的keys, 比较个数
let obj1Keys = Object.keys(obj1);
let obj2Keys = Object.keys(obj2);
if (obj1Keys.length !== obj2Keys.length) {
return false;
}
// 2、以obj1 为基准 和 obj2 依次递归比较
for (let key in obj1) {
// 比较当前 key 的 val -- 递归
const res = isEqual(obj1[key], obj2[key]);
if (!res) {
return false;
}
}
// 3、全相等
return true;
}
let obj1 = {
a: 1,
b: 2,
c: {
d: "d",
e: 'e'
}
}
let obj2 = {
a: 1,
b: 2,
c: {
d: "d",
e: 'e'
}
}
console.log(isEqual(obj1,obj2));