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

这篇博客探讨了如何在JavaScript中实现一个名为`equals`的函数,用于深度比较两个对象或函数是否相等。该函数首先检查输入类型,然后根据对象或函数的情况进行递归比较。它支持多个参数,可以比较多个对象对。博客通过示例展示了如何使用这个函数,例如比较对象属性、函数实例等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值