关于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;
  }
}

 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值