我正在浏览Javascript.info中的地图章节,并且有一个指向SameValueZero算法的链接。有人可以用简单的词来解释该算法如何工作。
我尝试浏览链接,但找不到任何内容。
答案 0 :(得分:1)
请参见specification:
内部比较抽象操作SameValueZero(x,y)(其中x和y是ECMAScript语言值)产生true或false。这样的比较如下:
- 如果Type(x)与Type(y)不同,则返回false。
如果Type(x)为Number,则
如果x为NaN而y为NaN,则返回true。
如果x为+ 0,y为-0,则返回true。
如果x为-0且y为+0,则返回true。
如果x与y相同,则返回true。
返回false。
返回SameValueNonNumber(x,y)。
与===
测试基本相同,不同之处在于,当x
和y
均为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: