js两个对象之间进行值比较

 

Object.prototype.equals = function(){
    let type = typeof this
    let allArguments = null
    let result = false
    if(type === 'function' && this instanceof Object){
        console.log('functionaaa')
        if(arguments.length > 1){
            result = true
            for(let i = 0;i <= arguments.length - 2;i++){
                result = equal(arguments[i],arguments[i+1])
                if(!result)break
            }
        }else{
            result = true
        }
    }else if(type === 'object'){
        console.log('functionbbb')
        allArguments = [this,...arguments]
        if(allArguments.length > 1){
            result = true
            for(let i = 0;i <= allArguments.length - 2;i++){
                result = equal(allArguments[i],allArguments[i+1])
                if(!result)break
            }
        }else{
            result = true
        }
    }else{
        result = false
    }

    function equal(a,b){
        let res = true

        if(typeof a !== typeof b)res = false
        if(a instanceof Object && !(a instanceof Array) && res){
            let keys = [...Object.keys(a),...Object.keys(b)]
            for(let i = 0;i<keys.length;i++){
                if(!res)break
                res = equal(a[keys[i]],b[keys[i]])
            }
        }else if(a instanceof Array && res){
            res = a.length === b.length
            for(let i = 0;i<a.length;i++){
                if(!res)break
                res = equal(a[i],b[i])
            }
        }else{
            res = a === b
        }
    
        return res
    }

    return result
}
let a = {a:1}
let b = {}
function c(){return {}}

let q = c.equals(2,2)//let q = c().equals(2,2)
let w = Object.equals({a:1},{a:1},{a:2})
let e = a.equals({a:1},{a:2})

console.log(q,w,e)

 


版权声明:本文为qq_38962010原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。