[js]Object.is和相等学习

IEEE754 浮点数运算标准

是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number)),一些特殊数值(无穷(Inf)与非数值(NaN)),以及这些数值的“浮点数运算符”;它也指明了四种数值舍入规则和五种例外状况(包括例外发生的时机与处理方式)。
该标准的全称为IEEE二进制浮点数算术标准(ANSI/IEEE Std 754-1985),又称IEC 60559:1989,

"Object.is()" VS "==="

这个标准中要求NaN不等于自身

Object.is的代码实现

Object.defineProperty(Object, 'is', {
  value: function(x, y) {
    if (x === y) {
      // 0 === -0, but they are not identical
      return x !== 0 || 1 / x === 1 / y;
    }
 
    // NaN !== NaN, but they are identical.
    // NaNs are the only non-reflexive value, i.e., if x !== x,
    // then x is a NaN.
    // isNaN is broken: it converts its argument to number, so
    // isNaN("foo") => true
    return x !== x && y !== y;
  },
  configurable: true,
  enumerable: false,
  writable: true
});

经验收集

比如要判断x是否为NaN,两种方式
① typeof x ==="number"&&isNaN(x)===true;//是number类型,且isNaN为true。
② x !== x;//true则为NaN,NaN是js中唯一个一个不等于自身的值

参考文献

  1. Object.is

你可能感兴趣的:([js]Object.is和相等学习)