javascript - 同值零算法如何工作?
问题描述
我正在浏览 Javascript.info 中的地图章节,并且有一个指向 SameValueZero 算法的链接。有人可以用简单的语言解释该算法是如何工作的。
我尝试通过链接,但找不到任何东西。
解决方案
见规格:
内部比较抽象操作 SameValueZero(x, y),其中 x 和 y 是 ECMAScript 语言值,产生真或假。如下进行这样的比较:
- 如果 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。
返回假。
返回 SameValueNonNumber(x, y)。
它与测试基本相同===
,除了 whenx
和y
are 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));
推荐阅读
- sql - 特定日期的销售额(每位用户)总和
- c++ - 使用 glGenFrameBuffers SFML + GLEW 时访问冲突
- asp.net-mvc - 做ASP。NET 核心仍然需要托管。网络支持
- python - 带有 dict.update() 的 Pandas groupby 函数
- sql - SQL Server,使用或语句条件
- r - 在不使用 for 循环的情况下将向量的不同元素加到一个新向量中?(R 编程)
- c# - 得到错误资产文件'obj\project.assets.json'没有'.NETCoreApp,Version = v2.2'的目标
- c - typedef 结构中的指针
- c - 当我将指针传递给函数时,取消引用指向指针的指针不起作用。为什么?(C)
- java - 如何使并发实用程序(JSR 236)在普通的非 EE Tomcat 8 中工作?