object.is 是 javascript 中比 === 更严谨的严格相等判断方法,能正确处理 nan、+0 和 -0:nan 与 nan 相等,+0 与 -0 不等,其余行为同 ===;但不支持对象内容比较,仅比较引用。

Object.is 是 JavaScript 中用于判断两个值是否严格相等的内置方法,它比 === 更严谨,尤其在处理 NaN、+0 和 -0 这类特殊值时行为更符合数学直觉。
与 === 的关键区别
Object.is(a, b) 的判定逻辑是:
- 如果两者都是
NaN,返回true(而NaN === NaN是false) - 如果一个是
+0、另一个是-0,返回false(而+0 === -0是true) - 其他情况与
===行为一致:类型相同、值相同才返回true
常见特殊值对比示例
可以这样验证:
Object.is(NaN, NaN) → trueObject.is(+0, -0) → false-
Object.is(0, -0) → false(因为0实际是+0) Object.is(5, 5) → trueObject.is('hello', 'hello') → true-
Object.is({}, {}) → false(对象比较的是引用,不是内容)
不适用于对象内容比较
Object.is 只做**引用相等性检查**,对普通对象、数组、函数等,只要不是同一个内存地址,就返回 false:
const a = {x: 1}; const b = {x: 1}; Object.is(a, b) → falseconst c = [1, 2]; const d = [1, 2]; Object.is(c, d) → false-
Object.is(a, a) → true(同一引用)
如需深度比较对象内容,应使用专门的库(如 Lodash 的 _.isEqual)或手写递归函数。
实际使用建议
适合在需要精确区分 +0/-0 或确认 NaN 相等性的场景中使用:
- 实现自定义的 Set/Map 键去重逻辑(例如避免
+0和-0被视为同一键) - 测试框架中做断言,确保
NaN值能被正确识别为相等 - 数值计算库中处理边界情况,比如浮点运算后校验结果是否为
-0
日常变量相等判断仍可优先用 ===,除非明确需要上述特殊行为。










