对同一个对象的两个引用是否可能是!==

Is it possible for two references to the same object to be !==?

本文关键字:是否 引用 两个 一个对象      更新时间:2023-09-26

我在Object.is()的Mozilla shim上卡住了。我对==和===之间的区别有点熟悉,但是这段代码中是否有拼写错误?如果不是,为什么v1会!== v1?

if (!Object.is) {
  Object.is = function(v1, v2) {
    if (v1 === 0 && v2 === 0) {
      return 1 / v1 === 1 / v2;
    }
    if (v1 !== v1) {
      return v2 !== v2;
    }
    return v1 === v2;
  };
}

当v1为NaN时将会发生。

与v2执行相同检查的原因:

    if (v1 !== v1) {
      return v2 !== v2;
    }

是因为,根据相同的文档,该函数在比较NaN的两个值时需要返回true,在与任何其他值进行比较时(显然)需要返回false。检查一个值是否为NaN(即值NaN,而不是"不是数字"的概念)的唯一可靠方法之一是将其与自身进行不相等比较。