object.is 是 javascript 中基于 samevalue 算法的严格相等判断方法,修复了 === 对 nan 和 -0/+0 判断不准确的问题:nan === nan 为 false 而 object.is(nan, nan) 为 true,+0 === -0 为 true 而 object.is(+0, -0) 为 false。

Object.is 是 JavaScript 中用于严格相等判断的内置方法,它比 === 更精准,尤其能正确处理 NaN 和 -0 这类特殊值。
为什么需要 Object.is?
普通严格相等 === 有两个常见“缺陷”:
-
NaN === NaN返回false(数学上 NaN 不等于任何值,包括自己) -
+0 === -0返回true(但它们在底层二进制表示和某些场景中行为不同)
Object.is 修复了这两点:它认为 NaN 等于 NaN,且 +0 不等于 -0。
Object.is 的基本用法
语法非常简单:
Object.is(value1, value2)
返回布尔值:true 表示两个值在 SameValue 算法下完全相等,否则为 false。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
例如:
-
Object.is(NaN, NaN)→true -
Object.is(+0, -0)→false -
Object.is(0, -0)→false(因为0实际是+0) -
Object.is(123, '123')→false(不进行类型转换,和===一致) -
Object.is({}, {})→false(对象比较的是引用,不是内容)
和 ===、== 的关键区别总结
三者行为对比:
== |
=== |
Object.is() |
|
|---|---|---|---|
NaN == NaN |
false |
false |
true |
+0 == -0 |
true |
true |
false |
5 == '5' |
true |
false |
false |
注意:Object.is 不做类型转换,也不比较对象内容 —— 它只按 SameValue 语义逐位/状态比对原始值或引用。
实际使用建议
适合在以下场景优先考虑 Object.is:
- 实现自定义的
deepEqual或memoize工具时,需准确识别NaN参数是否变化 - 处理金融、科学计算等对
-0和+0敏感的逻辑(如符号位参与运算) - 编写 polyfill 或兼容性代码时,作为更可靠的相等判断基元
- 测试断言中验证结果是否包含
NaN(比如expect(Object.is(result, NaN)).toBe(true))
日常变量比较仍可继续用 ===;只有当你明确需要区分 -0/+0 或确认 NaN 相等性时,才替换为 Object.is。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










