最近在卷vue源码时发现一个比较有意思的比较一个数据是否发生变化的方法hasChange,拿出分享下。

175 阅读1分钟

这个方法是在vue源码defineReactive方法定义对象的响应式属性的set中有调用,用于比较set时新传入的newValue和原来的属性的value,是否发生变化。如果返回false,那就结束set后续的操作。这个方法源码如下:

export function hasChanged(x: unknown, y: unknown): boolean {
  if (x === y) {
    return x === 0 && 1 / x !== 1 / (y as number)
  } else {
    return x === x || y === y
  }
}

大家可以看看这个方法,为什他要这么判断,可以在评论区留言发表自己的见解哦