/** 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 && keys.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
	}
}