跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

JavaScript中Object-is实现值相等性判断的算法

Object.is 是比 === 更精确的严格相等判断方法,能正确处理 NaN === NaN 为 false 和 +0 === -0 为 true 的边界情况;其核心逻辑是:同为 NaN 返回 true,+0 与 -0 返回 false,其余等价于 ===。 Object.is 是 JavaScript 中用于判断两个值是否严格相等的内置方法,它比
===
更精确地处理一些边界情况,比如
+0
与
-0
、
NaN
的比较。 核心判断逻辑 Object.is 的算法可概括为以下三步: 如果两个值都是
NaN
,返回 true (
===
会返回
false
) 如果一个是
+0
、另一个是
-0
,返回 false (
===
认为它们相等) 其余情况等价于严格相等
===
与 === 的关键区别 虽然多数场景下
Object.is(a, b)
和
a === b
结果一致,但以下两种情况不同:
Object.is(NaN, NaN) === true
,而
NaN === NaN
为
false
Object.is(+0, -0) === false
,而
+0 === -0
为
true
简易手写实现参考 可借助
Number.isNaN
和
1 / x
区分正负零来模拟: 使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件 如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Andr​​oid友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Andr​​oid应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更 下载 立即学习 “ Java免费学习笔记(深入) ”;
function ObjectIs(x, y) { if (x === y) { return x !== 0 || 1 / x === 1 / y; } return Number.isNaN(x) && Number.isNaN(y); }
该实现覆盖了所有规范行为:先用
===
快速判等;对
0
情况通过倒数符号判断正负;对非等值则单独检查是否同为
NaN
。 使用建议 在需要语义上“完全相同”的比较时选用
Object.is
,例如: 实现
Array.prototype.includes
(它内部就用
Object.is
判断元素存在性) 编写不可变数据结构的相等性校验(如 Redux 中的状态更新对比) 测试中验证浮点计算结果是否真正一致(尤其涉及
0
符号或无效数值)

相关文章