数据是否变动

2023-11-07  本文已影响0人  alue

在JS中,判断数据是否变动,并不是一件容易的事。

在 Vue 中,判断数据是否变动的函数源码如下:

// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill
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
  }
}

即便 x === y 了,也不能说数据没有变动,还需要进一步判断 —— 这是为了处理 +0-0. 表面上看+0-0没有区别,但是 1/+0 不等于 1/-0, 因此数据从 +0 变为 -0,Vue 需要重新计算依赖, 这里 hasChanged 必须返回 true.

即便 x !== y , 也不能说数据变动了 —— 这是因为在JS中 NaN 不等于 NaN

可以看出,框架开发者,要处理很多边界情况,这时候就要对语言特性有更深入的了解。

上一篇 下一篇

猜你喜欢

热点阅读