Object.is() 、比较操作符 ===、== 的区别
在JavaScript中,Object.is()和比较操作符===、==都可以用来比较两个值是否相等。然而,它们之间存在一些微妙的区别。
Object.is()
Object.is()是ECMAScript 6中的一个新方法,它用于比较两个值是否相等。它的语法如下:
Object.is(value1, value2)
当value1和value2具有相同的值时,Object.is()返回true。具体来说:
- 对于基本数据类型,如果它们的值相等,则返回true。例如,Object.is(5, 5)返回true。
- 对于对象,仅当它们引用同一个对象时,才返回true。例如,Object.is({}, {})返回false,而Object.is(window, window)返回true。
MDN中介绍:
Object.is() 方法判断两个值是否为同一个值,如果满足以下任意条件则两个值相等:
比较操作符 ===
比较操作符===也用于比较两个值是否相等。它的语法如下:
x === y
严格相等运算符(===)会检查它的两个操作数是否相等,并且返回一个布尔值结果。与相等运算符(==)不同,严格相等运算符总是认为不同类型的操作数是不同的。
使用举例:
"3" === 3; // false
true === 1; // false
null === undefined; // false
比较操作符 ==
比较操作符==也用于比较两个值是否相等。它的语法如下:
x == y
相等运算符(==)检查其两个操作数是否相等,返回一个布尔值结果。与严格相等运算符(===)不同,它会比较不同类型的操作数,并尝试强制类型转换。
使用举例:
console.log(5 == "5"); // true
console.log(5 == "hello"); // false
console.log(true == 1); // true
console.log(false == 0); // true
console.log(null == undefined); // true
console.log({} == {}); // false
console.log([] == []); // false
console.log("hello" == true); // false
由于==会进行类型转换,因此可能会出现一些奇怪的行为。例如,"" == false会被判断为 true,因为空字符串会被转换为0,而false会被转换为0,因此它们在使用==进行比较时会被判断为相等。
区别
Object.is()与===之间的主要区别在于它们如何处理NaN和-0。
- 对于
NaN,Object.is(NaN, NaN)返回true,而NaN === NaN返回false。 - 对于
-0和+0,Object.is(-0, 0)返回false,而-0 === 0返回true。
Object.is()与==之间的主要区别在于:
==运算符在判断相等前对两边的变量(如果它们不是同一类型)进行强制转换(这种行为将"" == false判断为true)Object.is不会强制转换两边的值。
因此,在比较两个值时,需要根据具体情况来选择使用 ==、=== 还是Object.is()。
参考文献
转载自:https://juejin.cn/post/7205127600271261753