object.is用于严格相等判断,比===更精确:nan===nan为false而object.is(nan, nan)为true,+0===-0为true而object.is(+0, -0)为false,其余行为与===一致。

Object.is 是 JavaScript 中用于判断两个值是否“严格相等”的内置方法,它比 === 更精确,能正确处理 NaN、+0 和 -0 这些特殊值的比较。
为什么需要 Object.is 而不只是用 ===
=== 在大多数场景下足够好,但它有两个公认的“例外”:
-
NaN === NaN返回false(而数学上 NaN 应该等于自身) -
+0 === -0返回true(但 IEEE 754 标准中 +0 和 -0 是两个不同值)
Object.is 修复了这两点:它把 NaN 当作相等,同时区分 +0 和 -0。
Object.is 的基本用法
语法很简单:
Object.is(value1, value2)
返回一个布尔值:true 表示两个值在 ES6 规范定义的“SameValue”算法下完全相等,否则为 false。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
常见例子:
-
Object.is(NaN, NaN)→true -
Object.is(+0, -0)→false -
Object.is(0, -0)→false -
Object.is(123, 123)→true -
Object.is('abc', 'abc')→true -
Object.is(true, 1)→false(不进行类型转换)
和 ===、== 的关键区别总结
三者行为对比(重点看标红部分):
-
==:会做类型转换(如'0' == 0为true),日常应避免使用 -
===:不转换类型,但NaN !== NaN,+0 === -0 -
Object.is:不转换类型,
Object.is(NaN, NaN) === true,Object.is(+0, -0) === false
也就是说,Object.is 是最贴近“数学意义上两个值完全相同”的判断方式。
实际开发中什么时候该用 Object.is
多数普通比较仍推荐用 === —— 简洁、高效、可读性好。但以下情况建议用 Object.is:
- 需要可靠检测
NaN(比如在 reduce 或自定义 equal 函数中) - 处理涉及符号零的底层计算(如数值算法、图形/音频库)
- 实现 polyfill、工具函数(如深比较、memoization 的 key 判断)时追求语义严谨
- 测试断言中验证
NaN是否被正确生成或传播
例如写一个防抖函数的依赖比较逻辑,若依赖项可能是 NaN,用 Object.is 可避免误判。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










