Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对同一对象的两个引用是否可能为!==?_Javascript_Reference_Comparison - Fatal编程技术网

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

Javascript 对同一对象的两个引用是否可能为!==?,javascript,reference,comparison,Javascript,Reference,Comparison,我在路上卡住了。我对==和===之间的区别有点熟悉,但这段代码中是否有输入错误?如果不是,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; } retur

我在路上卡住了。我对==和===之间的区别有点熟悉,但这段代码中是否有输入错误?如果不是,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,而不是概念不是数字)的唯一可靠方法之一是将其与自身进行比较,以确定不相等性。

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

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

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

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

1 JavaScript没有该Java/C含义的引用;2 x==x和x==x对于除NaN之外的任何x都是真的。只有当NaN不是对象,但NaN值是真的时。1 JavaScript没有Java/C意义上的引用;2 x==x和x==x对于除NaN之外的任何x都是真的。只有当这不是一个对象,而是NaN值时才是真的。检查值是否为NaN的唯一方法是将其与自身进行比较,看是否存在不平等性。isNaN如何。@TGH+1以清楚起见:谢谢这是一件奇怪的小事,有点古怪。但是,像往常一样,我只是读得不够仔细。@Nolo-isNaN对于任何非数字值都返回true,例如isNaN'foo'==true,它不仅仅测试NaN值。还有其他方法来测试NaN,例如typeof x=='number'&&isNaNx,但是x!==x小于类型:-检查某个值是否为NaN的唯一方法是将其与自身进行比较,以确定是否不相等。isNaN如何。@TGH+1以清楚起见:谢谢这是一件奇怪的小事,有点古怪。但是,像往常一样,我只是读得不够仔细。@Nolo-isNaN对于任何非数字值都返回true,例如isNaN'foo'==true,它不仅仅测试NaN值。还有其他方法来测试NaN,例如typeof x=='number'&&isNaNx,但是x!==x小于类型:-