/** Vue源码 296行
* Check if two values are loosely equal - that is,
* if they are plain objects, do they have the same shape?
*/
function isObject(data){
return typeof data === 'object' && data !== null
}
function looseEqual(a,b){
if(a===b) return true
let isObjectA = isObject(a)
let isObjectB = isObject(a)
if(isObjectA && isObjectB){
let isArrayA = Array.isArray(a)
let isArrayB = Array.isArray(b)
if(isArrayA && isArrayB){
return isArrayA.length === isArrayB && isArray.every((i,k)=> looseEqual(i,b[k]))
}else if(a instanceof Date && b instanceof Date){
return a.getTime() === b.getTime()
}else if(!isArrayA && !isArrayB){
let keysA = Object.keys(a)
let keysB = Object.keys(b)
return keysA.length === keysB.length && keysA.every(i=>looseEqual(a[i],b[i]))
}else{
/* istanbul ignore next */
return false
}
}else if(!isObjectA && !isObjectB){
return String(a) === String(b)
}else{
/* istanbul ignore next */
return false
}
}