同零值算法如何工作?

时间:2019-05-18 01:54:32

标签: javascript ecmascript-6 maps

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

我尝试浏览链接,但找不到任何内容。

2 个答案:

答案 0 :(得分:1)

请参见specification

  

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

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

         
        
    • 如果x为NaN而y为NaN,则返回true。

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

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

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

    •   
    • 返回false。

    •   
  4.   
  5. 返回SameValueNonNumber(x,y)。

  6.   

===测试基本相同,不同之处在于,当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));

答案 1 :(得分:0)

Same value zero comparison算法(see here why),它是strict equality comparison的修改版本。两者之间的主要区别是考虑到NaN平等性的NaN:

  • 零值表示NaN与NaN相等
  • 严格平等认为NaN与NaN不相等