我被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;
};
}
答案 0 :(得分:4)
当v1为NaN时会发生这种情况。
它与v2执行相同检查的原因:
if (v1 !== v1) {
return v2 !== v2;
}
是因为,根据相同的文档,当比较NaN的两个值时,函数需要返回true,并且当将它与任何其他值进行比较时(显然)为false。检查值是否为NaN的唯一可靠方法之一(即值NaN,而不是概念“不是数字”)是将其与自身进行比较以获得不等式。