Object.is是JavaScript中比===更精确的严格相等判断方法,能正确处理NaN、+0和-0:NaN与自身相等,+0与-0不等,其余行为与===一致。

Object.is 是 JavaScript 中用于严格判断两个值是否相等的内置方法,它比 === 更精确,尤其在处理 NaN、+0 和 -0 这些特殊值时表现一致且符合数学直觉。
Object.is 的核心特点
它解决了 === 在两个边界情况下的“不合理”行为:
-
NaN === NaN返回false,但Object.is(NaN, NaN)返回true -
+0 === -0返回true,但Object.is(+0, -0)返回false
基本用法格式
调用方式简单直接:
Object.is(value1, value2)
立即学习“Java免费学习笔记(深入)”;
返回布尔值:true 表示完全相等,false 表示不相等。
常见对比示例
可以这样验证它的行为:
-
Object.is(1, 1)→true -
Object.is('a', 'a')→true -
Object.is(NaN, NaN)→true(===不行) -
Object.is(+0, -0)→false(===会误判为true) -
Object.is(null, undefined)→false(和===一致)
适用场景建议
适合用在需要高精度相等判断的地方,比如:
- 实现不可变数据结构的 deepEqual 判断(配合递归或库如 Immutable.js)
- Redux 或 Zustand 等状态管理中比较引用或原始值是否真正变化
- 单元测试中验证
NaN是否被正确生成或传播
日常开发中若无特殊需求,仍可优先使用 ===;但涉及浮点运算、零符号或 NaN 处理时,Object.is 是更可靠的选择。


















