MDN"Object.is"替代提案

Cle*_*lem 7 javascript methods object ecmascript-6

我已经阅读了"Object.is"方法的MDN页面.它为不提供此方法的浏览器提供了替代代码:

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;
    };
}
Run Code Online (Sandbox Code Playgroud)

问题很简单:第二个"如果"何时可以成立?

感谢您的关注.

gpg*_*kko 4

它有点写在同一篇文章中:

这也与 === 运算符的相等不同。=== 运算符(以及 == 运算符)将数值 -0 和 +0 视为相等,并将Number.NaN 视为不等于 NaN

逻辑是这是运算符返回同一变量的NaN !== NaN唯一情况,因此它必须是关于比较的。然后,它进行相同的检查,并根据结果返回 true 或 false:如果比较是,则与 NaN 相比,则返回 NaN ,如果不是,则返回,因为 NaN 永远不会与非 NaN 相同!==trueNaNv2v2truetruefalse

  • `Number.NaN` 或 `NaN` 并不重要。JavaScript 在逻辑上只有一个“NaN”。 (3认同)