Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
本题难度:⭐
难度评级最高五星,最低一星。
答:
Object.is 方法用来对比两个值是否相等。传入两个参数,返回一个布尔值。
该方法修复了 === 在一些特殊情况下的错误判断,比如 +0 和 -0 ,NaN 和 NaN。
0 === -0 // true 按照常理应该为 false
NaN === NaN // false 按照常理应该为 true
// 用 Object.is
Object.is(0, -0) // false
Object.is(NaN, NaN) // true
兼容性挺不错的,除了 ie 浏览器都支持,现在这年头,祝看到这篇文章的同学永远不兼容 ie 浏览器。
Polyfill
从 Polyfill 来分析一下,Object.is 是如何解决 === 的问题的。
if (!Object.is) {
Object.defineProperty(Object, 'is', {
value: function (x, y) {
if (x === y) {
// x 为 0,y 为 -0,程序走到了这里
// 1/+0 = +Infinity, 1/-0 = -Infinity, 返回 +Infinity === -Infinity,为 false
return x !== 0 || 1 / x === 1 / y
} else {
// x 和 y 都为 NaN,程序就走到了这里
// 返回 NaN !== NaN && NaN !== NaN,为 true
return x !== x && y !== y
}
}
})
}
与本题相关问题:
「前端每日一问(6)」== 和 ===有什么区别,分别在什么情况使用?
结尾
如果我的文章对你有帮助,你的👍就是对我的最大支持^_^
我是阿林,输出洞见技术,再会!
上一篇:
「前端每日一问(7)」JavaScript中有哪些数据类型?
下一篇: