同值零算法如何工作?

Joh*_*epp 6 javascript maps ecmascript-6

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

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

Cer*_*nce 15

参见规格

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

  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 的 Number 值相同,则返回 true。

    • 返回假。

  3. 返回 SameValueNonNumber(x, y)。

它与测试基本相同===,除了当xy都是 时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));
Run Code Online (Sandbox Code Playgroud)