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