Object.is() 与 === 大部分行为一致,仅在+0/-0比较(Object.is区分,===视为相等)和NaN自比较(Object.is返回true,===返回false)两处不同,因前者实现SameValue算法,后者为SameValueZero。

Object.is() 和 === 在绝大多数场景下行为一致,都要求值相等且类型相同,不进行类型转换。真正有区别的只有两个边缘情况。
+0 与 -0 的比较结果不同
=== 把 +0 和 -0 视为相等,而 Object.is() 明确区分它们:
-
+0 === -0→ true -
Object.is(+0, -0)→ false -
Object.is(-0, -0)→ true(自身比较正常)
NaN 的自比较行为相反
NaN 是唯一一个不等于自身的原始值,=== 遵循这一规则;Object.is() 则修复了这点,让 NaN 能和自己相等:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
NaN === NaN→ false -
Object.is(NaN, NaN)→ true -
Object.is(NaN, 0/0)→ true(因为0/0就是NaN)
其他所有情况完全一致
包括但不限于:
立即学习“Java免费学习笔记(深入)”;
-
null、undefined、布尔值、字符串、普通数字、BigInt、Symbol、对象引用等的比较,两者返回结果完全相同 - 类型不同直接返回 false,都不做隐式转换
- 对
''、false、0等“falsy 值”也不特殊处理,只看实际值和类型
这些差异源于 Object.is() 实现的是 ES 规范中的 SameValue 算法,而 === 实现的是 SameValueZero —— 后者把 +0 和 -0 当作同一个零来对待。

















