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

Object.is 是 JavaScript 中用于判断两个值是否“严格相等”的内置方法,它比 === 更精确,能正确处理 NaN、+0 和 -0 这些特殊值的比较。
Object.is 与 === 的关键区别
普通严格相等(===)认为 NaN !== NaN,且 +0 === -0;而 Object.is 把它们视为不同:
-
Object.is(NaN, NaN)返回true(===返回false) -
Object.is(+0, -0)返回false(===返回true) - 其余情况(如数字、字符串、对象引用等)行为与
===一致
基本用法示例
调用方式很简单:传入两个参数,返回布尔值。
✅ 正确用法:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
Object.is(1, 1); // true<br>Object.is('a', 'a'); // true<br>Object.is({}, {}); // false(引用不同)<br>Object.is(NaN, NaN); // true<br>Object.is(+0, -0); // false
什么时候该用 Object.is?
适合需要语义上“完全一致”的场景,比如:
- 实现自定义的
Array.prototype.includes或Set查找逻辑(ES2016 规范中includes内部就用Object.is) - 状态对比(如 React 的
useMemo或useCallback依赖数组比较) - 处理可能含
NaN或区分正负零的数值计算或配置校验
注意点和常见误区
它不进行类型转换,也不递归比较对象内容,仅做同一性(Same-value)判断:
-
Object.is(0, -0)→false(注意:这里是0字面量,默认为+0) -
Object.is(Object.is, Object.is)→true(函数是引用类型,相同引用返回 true) -
Object.is([1], [1])→false(两个不同数组实例,即使内容相同)

















