// 是不是对象 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));