日常开发中或多或少都会用到判断两个值是否相等的校验,该算法可以实现判断所有数据类型的判断(对象 数组 字符串 数字)
// 是否是对象
isObject (obj) {
return obj !== null && typeof obj === 'object'
},
// 判断值相等
looseEqual (a, b) {
if (a === b) { return true }
var isObjectA = this.isObject(a)
var isObjectB = this.isObject(b)
if (isObjectA && isObjectB) {
try {
var isArrayA = Array.isArray(a)
var isArrayB = Array.isArray(b)
if (isArrayA && isArrayB) {
return a.length === b.length && a.every((e, i) => {
console.log(e, b[i], '777888')
return this.looseEqual(e, b[i])
})
} else if (a instanceof Date && b instanceof Date) {
return a.getTime() === b.getTime()
} else if (!isArrayA && !isArrayB) {
var keysA = Object.keys(a)
var keysB = Object.keys(b)
return keysA.length === keysB.length && keysA.every((key) => {
return this.looseEqual(a[key], b[key])
})
} else {
/* istanbul ignore next */
return false
}
} catch (e) {
/* istanbul ignore next */
return false
}
} else if (!isObjectA && !isObjectB) {
return String(a) === String(b)
} else {
return false
}
},