Object.is() 与 === / == 的区别

1. ==(两等号)

== 比较前会进行隐式类型转换,将两侧转换为相同类型后再比较。

1 == '1';     // true
null == undefined; // true
0 == false;   // true

2. ===(三等号)

=== 比较时不进行类型转换,类型不同直接返回 false,是"严格相等"。

1 === '1';    // false
null === undefined; // false

3. Object.is

Object.is 在三等号基础上特殊处理了两个边界情况:

  • Object.is(NaN, NaN) 返回 true(而 NaN === NaN 是 false)。
  • Object.is(+0, -0) 返回 false(而 +0 === -0 是 true)。

其他情况下 Object.is(a, b) 与 a === b 完全一致。

Object.is(NaN, NaN);   // true
NaN === NaN;            // false
Object.is(+0, -0);      // false
+0 === -0;              // true
Object.is('a', 'a');    // true

补充:Object.is 应被认为有其特殊的用途,而不能笼统地说它比 == 更宽松或更严格。日常推荐使用 ===,仅在需要明确判定 NaN 或符号位零时用 Object.is。

来源整理自:vue3js.cn 面试官系列