function hasChanged(x,y) {}
hasChanged函数接受两个参数,判断参数是否发生变化,即两个参数是否完全相同,发生了改变返回true,否则返回flase。
对象类型数据先比较值,相同则比较址,址不同也返回true。
首先判断 x===y 的情况,并不能直接返回false,需要加上正负的判断。
其次判断 x !== y的情况,即x !== y但是x确实和y相同,这种情况就是NaN。
vue官方源码
export function hasChanged(x,y) {
if(x === y){
return x === 0 && 1 / x !== 1 / y // 1 / 0 = Infinity , 1 / -0 = -Infinity
} else {
return x === x || y === y // 排除NaN
}
}