JS 判断两个对象是否相等

2020-06-29  本文已影响0人  辞暮尔尔_烟火年年
判断两个对象是否相等,执行结果:
/**
 * [judgeEqual 判断两个对象是否相等]
 * @param  {[Object]} obj              [目标对象]
 * @param  {[Boolean]} undefinedIsNull [undefined 等于 null]
 * @return {[Boolean]}                 [返回结果]
 */
Object.prototype.judgeEqual = function(obj,undefinedIsNull){

    // 需要判断的对象的属性
    const obj1Props = Object.getOwnPropertyNames(this);
    // 目标对象的属性
    const obj2Props = Object.getOwnPropertyNames(obj);
    const propLength = obj1Props.length;

    // 长度不等返回false
    if(propLength !== obj2Props.length) {
        return false;
    }

    // 遍历值是否相等
    for(let i = propLength - 1; i >= 0; i--){
        let prop = obj1Props[i];
        let currentVal = this[prop];

        // 当前的属性值如果为null
        if(currentVal === null){

            // undefinedIsNull : false
            if(!undefinedIsNull){
                if(obj[prop] !== null){
                    return false;
                }
            }

            // undefinedIsNull : true
            else{
                if(currentVal != this[prop]){
                    return false;
                }
            }
            
        }

        // 属性值非对象,直接判断属性值
        else if(typeof currentVal !== "object"){
            if(currentVal !== obj[prop]){
                return false;   
            }
        }

        // 属性值为对象,继续递归判断
        else{
            if(!currentVal.judgeEqual(obj[prop])){
                return false;
            }
        }
        
    }

    return true;
}
上一篇 下一篇

猜你喜欢

热点阅读