is
2023年06 月18日
一、认识
Object.is()
方法判断两个值是否为同一个值,如果满足以下任意条件则两个值相等:
-
都是
undefined
-
都是
null
-
都是
true
或都是false
-
都是相同长度、相同字符、按相同顺序排列的字符串
-
都是相同对象(意味着都是同一个对象的值引用)
-
都是数字且
- 都是
+0
- 都是
-0
- 都是
NaN
- 都是同一个值,非零且都不是
NaN
- 都是
1.1 Object.is() vs ==
`` 与 ==
: Object.is()
与 ==
不同。==
运算符在判断相等前对两边的变量(如果它们不是同一类型)进行强制转换(这种行为将 "" == false
判断为 true
),而 Object.is
不会强制转换两边的值。
1.2 Object.is() vs ===
Object.is()
与 ===
: Object.is()
与 ===
也不相同。差别是它们对待有符号的零和 NaN
不同,例如,===
运算符(也包括 ==
运算符)将数字 -0
和 +0
视为相等,而将 Number.NaN
与 NaN
视为不相等。
二、语法
Object.is(value1, value2);
三、返回值
一个布尔值,表示两个参数是否是同一个值
四、应用场景
五、原理(Polyfill)
function is(x,y){
if (x === y) {
return x !== 0 || 1 / x === 1 / y;
} else {
return x !== x && y !== y;
}
}
5.1 NaN
x !== x && y !== y
5.2 +0 -0
1 / x === 1 / y