跳到主要内容

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.NaNNaN 视为不相等。

二、语法


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

参考资料


core-js 中 Object.is 的 Polyfill