Object.is 是比 === 更精确的严格相等判断方法,能正确处理 NaN === NaN 为 false 和 +0 === -0 为 true 的边界情况;其核心逻辑是:同为 NaN 返回 true,+0 与 -0 返回 false,其余等价于 ===。
Object.is
是 JavaScript 中用于判断两个值是否严格相等的内置方法,它比
更精确地处理一些边界情况,比如
与
、
的比较。
核心判断逻辑
Object.is 的算法可概括为以下三步:
如果两个值都是
,返回
true
(
会返回
)
如果一个是
、另一个是
,返回
false
(
认为它们相等)
其余情况等价于严格相等
与 === 的关键区别
虽然多数场景下
和
结果一致,但以下两种情况不同:
,而
为
,而
为
简易手写实现参考
可借助
和
区分正负零来模拟:
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
立即学习
“
Java免费学习笔记(深入)
”;
该实现覆盖了所有规范行为:先用
快速判等;对
情况通过倒数符号判断正负;对非等值则单独检查是否同为
。
使用建议
在需要语义上“完全相同”的比较时选用
,例如:
实现
(它内部就用
判断元素存在性)
编写不可变数据结构的相等性校验(如 Redux 中的状态更新对比)
测试中验证浮点计算结果是否真正一致(尤其涉及
符号或无效数值)
===+0-0NaNNaN===false+0-0======Object.is(a, b)a === bObject.is(NaN, NaN) === trueNaN === NaNfalseObject.is(+0, -0) === false+0 === -0trueNumber.isNaN1 / x
function ObjectIs(x, y) {
if (x === y) {
return x !== 0 || 1 / x === 1 / y;
}
return Number.isNaN(x) && Number.isNaN(y);
}
===0NaNObject.isArray.prototype.includesObject.is0