美文网首页
数据是否变动

数据是否变动

作者: alue | 来源:发表于2023-11-07 19:35 被阅读0次

在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

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

相关文章

网友评论

      本文标题:数据是否变动

      本文链接:https://www.haomeiwen.com/subject/txpfwdtx.html