SOURCE

function deepEqual(a, b) {
    // 如果 a 和 b 指向同一块内存,则它们必然相等,直接返回 true
    if (a === b) {
        return true;
    }

    // 如果 a 和 b 其中有一个为 null 或 不是对象,则它们必然不相等,直接返回 false
    if (typeof a !== "object" || a === null || typeof b !== "object" || b === null) {
        return false;
    }

    // 获取对象 a 和 b 的属性名数组
    const keysA = Object.keys(a);
    const keysB = Object.keys(b);

    // 如果属性名数组的长度不同,则 a 和 b 不相等,直接返回 false
    if (keysA.length !== keysB.length) {
        return false;
    }

    // 遍历对象 a 的所有属性,逐个比较它们是否相等
    for (const key of keysA) {
        // 如果对象 b 中不存在当前属性,则 a 和 b 不相等,直接返回 false
        if (!keysB.includes(key)) {
            return false;
        }

        // 递归比较当前属性的值是否相等
        if (!deepEqual(a[key], b[key])) {
            return false;
        }
    }

    // 如果所有属性都相等,则 a 和 b 相等,返回 true
    return true;
}

// 测试用例
const a = {
    name: "Tom",
    age: 18,
    info: {
        gender: "male",
        address: {
            province: "Guangdong",
            city: "Shenzhen",
        },
    },
};

const b = {
    name: "Tom",
    age: 18,
    info: {
        gender: "male",
        address: {
            province: "Guangdong",
            city: "Shenzhen",
        },
    },
};

const c = {
    name: "Jerry",
    age: 18,
    info: {
        gender: "male",
        address: {
            province: "Guangdong",
            city: "Shenzhen",
        },
    },
};

console.log(deepEqual(a, b)); // true
console.log(deepEqual(a, c)); // false
console 命令行工具 X clear

                    
>
console