手寫深度比較 isEqual

由於考慮了不少種狀況,最後簡寫爲這個版本,暫時能想到的可能性都寫出了數組

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
    }
}
相關文章
相關標籤/搜索