关于Object.is()方法判断是否相等浅比较

 在js中 基本数据类型用全等判断是否相等有不严谨的时候

+0 === -0

js中打印为true,我们期望是false

 

NaN === NaN

js中打印为false,我们期望是true

所以在object.is()方法中

解决解决+0 === -0 为true,我们可以通过:
  1/(+0)结果为Infinity,
  1/(-0)结果为-Infinity
  而Infinity === -Infinity为false。
所以当a === b时,且1 / x === 1 / y,则可以排除+0和-0的问题。

解决 NaN === NaN为false,我们可以通过:
  NaN和自身不相等的特性来解决,即:
  a !==b && a !== a && b !== b时,确定这两个数是NaN。

方法如下:

function is(x: mixed, y: mixed){
  if (x === y) {
    //排除 +0 == -0
    return x !== 0 || y !== 0 || 1 / x === 1 / y;
  } else {
    //排除 NaN
    return x !== x && y !== y;
  }
}

 

©️2020 CSDN 皮肤主题: 黑客帝国 设计师:上身试试 返回首页