在ES5实现ES6中的Object.is方法

  ES6中对象的扩展里面添加了一个Object.is方法,用于比较两个值是否严格相等。内部计算与 === 行为基本一致。那么我们怎么在不支持这个方法的ES5中实现呢?

首先我们需要搞清楚两点,1:Object.is(+0,-0) // false 2:Object.is(NaN, NaN) // true。

好了那么让我们自己写出这个方法吧,代码如下:

(function() {

  Object.defineProperty(Object,'is', {

    value: function(value1, value2) {

      if(value1 === value2) return value1 !== 0 || 1 / value1 === 1 / value2;

      return value1 !== value1 && value2 !== value2;

    },

    writable: true,

    configurable: true,

    enumerable: false

  })

使用 Object.is(NaN, NaN);

接下来我们说下这里面得判断。 如果value1 === value2的话 我们就需要排除+0 === -0 的情况, 第一步 value1 !== 0排除非0情况,不是0的话直接返回true,如果是0就会接着走1/0 ===1/0,返回true,1/+0 =Infinite, 1/-0=-Infinite 通过这判断+0和-0不相等返回false

判断NaN === NaN,我们知道NaN是不等于它本身的,所以通过value1 !== value1 && value2 !== value2这个逻辑与来判断

})()

猜你喜欢

转载自www.cnblogs.com/aleng-liu/p/9775293.html