function hasChanged(x,y) {}

hasChanged函数接受两个参数,判断参数是否发生变化,即两个参数是否完全相同,发生了改变返回true,否则返回flase。
对象类型数据先比较值,相同则比较址,址不同也返回true。

首先判断 x===y 的情况,并不能直接返回false,需要加上正负的判断。

【Vue】手写Vue工具函数hasChanged源码-LMLPHP

其次判断 x !== y的情况,即x !== y但是x确实和y相同,这种情况就是NaN。

【Vue】手写Vue工具函数hasChanged源码-LMLPHP

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
	}
}
03-30 09:01