Object.is 与 === 大多数情况下行为一致,但 Object.is 认为 NaN 等于自身(而 === 判定为 false),且区分 +0 与 -0(而 === 视为相等);其余所有值(含对象引用)判断结果相同。

Object.is 和 ===(全等运算符) 大多数情况下行为一致,但有两个关键例外:处理 NaN 和区分 +0 与 -0。
NaN 的相等性判断不同
全等运算符规定 NaN !== NaN,这是唯一一个不等于自身的值;而 Object.is 认为 NaN 与自身相等:
-
NaN === NaN→ false -
Object.is(NaN, NaN)→ true
+0 和 -0 被视为不同
全等运算符把正零和负零看作完全相等;Object.is 则严格区分它们:
-
+0 === -0→ true -
Object.is(+0, -0)→ false
其他值表现完全一致
对于所有其他原始值(字符串、布尔、数字(非 ±0)、bigint、symbol、null、undefined)以及对象引用,两者结果相同:
立即学习“Java免费学习笔记(深入)”;
-
5 === 5和Object.is(5, 5)都是 true -
{} === {}和Object.is({}, {})都是 false(因引用不同) -
null === null和Object.is(null, null)都是 true
实际使用建议
需要严格语义的相等判断时(比如实现 Object.freeze 的内部逻辑、自定义深比较、或处理可能含 NaN / ±0 的数值计算),优先用 Object.is。日常类型安全比较(如 if (x === undefined))仍可用 ===,简洁且可读性好。










