导入
相等性
JavaScript ES5 中使用 '==' 和 '===' 进行相等性判断;以及 ES6 中引入的 Object.is() 方法,其行为与 '===' 非常相似。
在本节课中,我们将学习 ES6 中对象和函数的改进。与 ES6 的大多数更新一样,我们现在可以用更少的代码、更清晰的方式解决之前的问题。
我们先从一个细节问题开始:比较操作。大多数开发者更倾向于使用 === 而不是 ==,因为前者会考虑操作数的类型。
在 ES6 中,Object.is(a, b) 提供了“值相等性”判断,其行为几乎与 === 相同,但存在以下两点差异:
Object.is(+0, -0)返回false,而-0 === +0返回trueObject.is(NaN, NaN)返回true,而NaN === NaN返回false
1console.log(Object.is(+0, -0)) // 返回 false,而 2console.log(-0 === +0) // 返回 true 3 4Object.is(NaN, NaN) // 返回 true,而 5console.log(NaN === NaN) // 返回 false
目前我仍继续使用 ===,并特别注意 NaN 值,因为通常应在比较前通过更具语义的内置函数 isNaN 来检测和处理这些值。有关 Object.is 的更多详情,可参阅 MDN 的 Object.is 文档。