首页 > 解决方案 > 同值零算法如何工作?

问题描述

我正在浏览 Javascript.info 中的地图章节,并且有一个指向 SameValueZero 算法的链接。有人可以用简单的语言解释该算法是如何工作的。

我尝试通过链接,但找不到任何东西。

标签: javascriptecmascript-6maps

解决方案


规格

内部比较抽象操作 SameValueZero(x, y),其中 x 和 y 是 ECMAScript 语言值,产生真或假。如下进行这样的比较:

  1. 如果 Type(x) 与 Type(y) 不同,则返回 false。
  2. 如果 Type(x) 是 Number,那么

    • 如果 x 是 NaN 并且 y 是 NaN,则返回 true。

    • 如果 x 为 +0 且 y 为 -0,则返回 true。

    • 如果 x 为 -0 且 y 为 +0,则返回 true。

    • 如果 x 与 y 的数值相同,则返回 true。

    • 返回假。

  3. 返回 SameValueNonNumber(x, y)。

它与测试基本相同===,除了 whenxyare both NaN,它们也通过了测试。你可以像这样实现它:

const sameValueZero = (x, y) => x === y || (Number.isNaN(x) && Number.isNaN(y));

console.log(sameValueZero(0, 0));
console.log(sameValueZero(0, 1));
console.log(sameValueZero(0, NaN));
console.log(sameValueZero(NaN, NaN));


推荐阅读