Object.is方法的polyfill

随笔

if (!Object.is) {
  Object.defineProperty(Object, 'is', {
    value: function(x, y) {
      if (x === y) {
        // 需要辨别+0与-0(用"==="比较+0和-0会是true,但实际应该为false),
        // 所以,在下面的判断中,
        // 如果x和y不为0,则返回true;
        // 如果x和y为0,则用 1/x(Infinity/-Infinity) 比较 1/y(Infinity/-Infinity)做比较;
        return x !== 0 || 1 / x === 1 / y;
      }
      // 在使用"==="比较时,NaN跟NaN是不等的,
      // 所以这个单独对NaN的情况进行判断
      return x !== x && y !== y;
    },
  });
}

 

posted @ 2022-12-31 18:46  樊顺  阅读(31)  评论(0编辑  收藏  举报