Object.is():
Object.is()是 ECMAScript 6 (ES6) 中引入的方法,用于比较两个值是否严格相等。- 它会考虑特殊情况,如处理 NaN 和 -0(负零)的情况。
Object.is()的语法如下:Object.is(v1, v2)。它返回一个布尔值,表示两个值是否严格相等。
Object.is(7, 7); // true
Object.is(7, ‘7’); // false
Object.is('foo', 'foo'); // true
Object.is(null, null); // true
Object.is(NaN, NaN); // true
Object.is(0, -0); // false
补充一下NaN的相关知识:
- NaN 是 JavaScript 中的特殊值,它代表 "Not-a-Number",即不是一个数字。NaN 是一个全局对象,通常用于表示一个无效的或不可用的数字值。当某些数学操作无法产生有效的数值结果时,JavaScript 就会返回 NaN。
- 虽然 NaN 表示一个无效的数值,但它仍然是一个特殊的 JavaScript 数据类型,可以通过
isNaN()函数来检测一个值是否是 NaN。这个函数返回true如果给定的值是 NaN,否则返回false。
===(严格相等运算符):
===用于比较两个值是否严格相等,它不会进行类型转换。- 如果两个值的类型不同或值不同,
===会返回false,否则返回true。
5 === 5; // true
'5' === 5; // false
null === null; // true
NaN === NaN; // false
0 === -0; // true
==(松散相等运算符):
==用于比较两个值是否相等,它会进行类型转换,尝试将操作数转换为相同的类型,然后再进行比较。- 这种比较方式可能会导致一些意外的结果,因为它会强制类型转换。
'5' == 5; // true
null == undefined; // true
1 == true; // true
0 == false; // true
总结与思考
通过上面的例子我们可以知道,Object.is() 和=== 是严格相等运算符,用于判断类型与值是否相同,而==属于松散相等运算符,用于判断值是否相同,在实际应用中更推荐使用严格相等运算符
既然已经有了一个严格相等运算符===,那为什么ES6还要引入一个新的Object.is()呢?
Object.is()的引入是为了处理涉及到 NaN 和 -0(负零)时的情况,在日常使用中大多数我们使用的还是===,只有遇到NaN 和 -0的特殊情况才需要使用Object.is()