Vue源码中的对象比较函数写的极为经典漂亮,在此进行部分注释并添加一个函数类型比较判断,代码如下:
function isObject(o) {
return typeof o==='object'
}
function isFunction(o) {
return typeof o==='function'
}
function looseEqual(a,b) {
//如果a和b都是值类型,可以直接判断是否相等
if(a===b) return true;
const isObjectA=isObject(a)
const isObjectB=isObject(b)
if(isObjectA&&isObjectB){//如果都是对象
try{
const isArrayA=Array.isArray(a)
const isArrayB=Array.isArray(b)
if(isArrayA&&isArrayB){//如果都是数组
return a.length===b.length&&a.every((e,i)=>{
return looseEqual(e,b[i])
})
}else if(a instanceof Date&&b instanceof Date){
return a.getTime==