由于考虑了不少种状况,最后简写为这个版本,暂时能想到的可能性都写出了数组
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 } }