是否有可能对同一个对象进行两次引用!==?

时间:2014-07-17 03:40:08

标签: javascript reference comparison

我被Mozilla shim for Object.is()困住了。我模糊地熟悉==和===之间的区别,但这段代码中是否有拼写错误?如果没有,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;
  };
}

1 个答案:

答案 0 :(得分:4)

当v1为NaN时会发生这种情况。

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

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

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

相关问题