首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MDN "Object.is“备选方案

MDN "Object.is“备选方案
EN

Stack Overflow用户
提问于 2014-01-31 14:31:45
回答 2查看 253关注 0票数 7

我读过"Object.is“方法上的MDN页面。它为不提供此方法的浏览器提供了另一种代码:

代码语言:javascript
复制
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;
    };
}

问题很简单:什么时候第二个“如果”才是真的?

感谢您的关注。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-31 14:37:37

它是用同一条写的

根据===运算符,这与相等也不一样。===运算符(以及==运算符)将数字值-0和+0视为相等,将Number.NaN视为不等于NaN

逻辑是NaN !== NaN!==操作符在同一变量上返回true的唯一情况,所以它必须是关于NaN比较的。然后,它对v2执行相同的检查,并根据结果返回false :如果v2比较是true__,那么与NaN相比,它是关于NaN的,因此返回true__,如果不返回false,则返回false,因为NaN永远不会与非NaN的事物相同。

票数 4
EN

Stack Overflow用户

发布于 2019-11-12 16:29:19

请注意,我们只有超过一个NaN:

代码语言:javascript
复制
var notNaN = new DataView(new Uint8Array([0x7f, 0xf8,0,0,0,0,0,1]).buffer).getFloat64(0)
Object.is(notNaN, NaN) // true

const byteOf = (number, index) => {let v = new DataView(new ArrayBuffer(8)); v.setFloat64(0, number); return v.getUint8(index);}

byteOf(NaN, 7) // 0
byteOf(notNaN, 7) // 1

所以有两个可区分的值,但是Object.is()说,它们是相同的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21482500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档