js中如何判断两个对象是否相等

1、判断两个对象的引用地址

ES6中,提供了一个方法可以用来判断两个对象的引用地址是否一致:Object.is(value1, value2)。返回值为一个布尔值,如果两个对象引用地址一致则返回值为true,反之则为false

####2、判断两个对象内容一致
想要比较两个对象的内容是否一致,需要遍历对象所有的键名和键值,判断是否完全一致。
实现思路:
1. 先判断两个对象引用地址是否一致
2. 获取对象所有键名的数组,并且判断长度是否一致
3. 遍历键名数组,判断键值是否都相等

function isObjectValueEqual(obj1, obj2){
    // 1.判断引用地址是否一致,一致则直接返回true
    if(Object.is(obj1, obj2)) return true
    const props1 = Object.getOwnPropertyNames(obj1)
    const props2 = Object.getOwnPropertyNames(obj2)
    // 2.判断键名数组长度是否一致,不一致则直接返回false
    if(props1.length !== props2.length) return false;
    // 3.键名数组长度一致,遍历键名数组,判断所有值是否一致
    for(let prop in obj1){
        // 3.1判断obj1的键值在obj2中是否存在,存在则进一步判断值,不存在直接返回false
        if(obj2.hasOwnProperty(prop)){
            // 3.2判断obj1的键值是否为对象,是则递归判断,否则直接判断值是否相等
            if(typeof obj1[prop] === 'object'){
                if(!isObjectValueEqual(obj1[prop],obj2[prop])) return false
            }else{
                if(obj1[prop] !== obj2[prop]) return false
            }
        }else{
            return false
        }
    }
    return true
}