如何理解并运用Object.is()方法

  在ES5中,如何比较两个值是否相等?

1         === 1;         // => true
'abc'     === 'abc';     // => true
1    === '1';       // => false
1    === true;      // => false

        相信大家都知道,无非就是用严格相等运算符(===),但是对于该方法中NaN不等于自身以及+0等于-0,无疑是一种缺陷。在这里,我们引出了一种新的方法。

       ES6提出“Same-value equality”(同值相等)算法用于解决JavaScript在所有环境中,只要两个值是一样的,他们的值就应该相等。object.is就是部署这个算法的新方法。

1 === 1;  // true
'abc' === 'abc'  // true

object.is(1,1)  // ture
object.is('abc','abc')  // true


1 === NaN;   // false

object.is(1,NaN)   // false
ES5  严格比较运算符

+0 === -0  //true
NaN === NaN  //false

ES6  Object.is()

object.is(+0,-0)  //false
object.is(NaN,NaN)  //true

可以看出,Object.is方法和严格比较运算符的行为基本一致,不同之处只有两个:一是+0不等于-0,二是NaN等于自身。

       由上面可以看出,严格相等运算符是比较值的好方法。

       想要检查NaN值或对+0和-0更严格的区分,ES5 也可以通过下面的代码,部署Object.is()

代码如下:

if (!Object.is) {
    Object.is = function (x, y) {
    if (x === y) {
      // 处理 0 === -0 的情况
      return x !== 0 || x / 1 !== y / 1
    } else {
      // 处理 NaN === NaN 为 false 的情况
      return x !== x && y !== y
    }
  }
}
console.log(Object.is(NaN,NaN));
console.log(Object.is(+0,-0));

打印结果如下:

 Object.is() 作为比较值的函数性方法也很有用,在这里就不列举了。

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值