因为考虑了很多种情况,最后简写为这个版本,暂时能想到的可能性都写出了

function isEqual(obj1, obj2) {
    if (typeof obj1 === typeof obj2) {
        if (typeof obj1 === 'object') {
            const obj1Keys = Object.keys(obj1)
            const obj2Keys = Object.keys(obj2)
            if (obj1Keys.length === obj2Keys.length) {
                if (obj1 instanceof Array === obj2 instanceof Array || obj1 instanceof Object === obj2 instanceof Object) {
                    for (let i in obj1) {
                        const res = isEqual(obj1[i], obj2[i])
                        if (!res) {
                            console.log('走了对象或者数组内部循环不相同的错误,具体错误看上一个报错信息')
                            return false
                        }
                    }
                    return true
                } else {
                    console.log('走了两个引用类型不同的错误 || 走了两个引用类型是function的错误')
                    return false
                }
            } else {
                console.log('走了两个引用类型的长度不同的错误')
                return false
            }
        } else {
            if (obj1 === obj2) {
                return true
            } else {
                console.log('走了两个基本类型数据不相同的错误')
                return false
            }
        }
    } else {
        console.log('走了两个数据类型都不相同的错误')
        return false
    }
}

因为是下雨天
3 声望0 粉丝