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 区分正负零来模拟:
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符号或无效数值)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











