因为考虑了很多种情况,最后简写为这个版本,暂时能想到的可能性都写出了
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
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。