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 面试官系列



