在前端开发中,我们经常需要判断两个值是否相等。然而,JavaScript 中的相等判断并不完全符合我们的预期,因为它会进行类型转换。例如,使用 ==
或 ===
运算符判断 "1"
和 1
是否相等,结果是不相等的。
为了解决这个问题,ECMAScript 2021(ES12)引入了一个新的方法 Object.is
,它可以更准确地判断两个值是否相等。
Object.is 的用法
Object.is
方法接受两个参数,它们是要比较的两个值。如果这两个值相等,返回 true
;否则返回 false
。
Object.is(value1, value2);
Object.is
方法的比较规则如下:
- 如果两个值都是
undefined
,返回true
。 - 如果两个值都是
null
,返回true
。 - 如果两个值都是相同的布尔值,返回
true
。 - 如果两个值都是相同的字符串,返回
true
。 - 如果两个值都是相同的数字,返回
true
。但是,如果其中一个是NaN
,则返回false
。 - 如果两个值都引用同一个对象,返回
true
。 - 如果两个值都是相同类型的对象,并且它们具有相同的值,返回
true
。 - 其他情况都返回
false
。
Object.is 的优点
相比于 ==
和 ===
运算符,Object.is
方法有以下优点:
- 它不会进行类型转换。因此,
Object.is("1", 1)
返回false
。 - 它可以判断
NaN
。因为NaN
不等于任何值,包括它本身,所以Object.is(NaN, NaN)
返回true
。 - 它可以判断
-0
和+0
。因为这两个值在数学上是相等的,但是在 JavaScript 中它们不相等,所以Object.is(-0, +0)
返回false
。
示例代码
下面是几个使用 Object.is
方法的示例代码:
// javascriptcn.com 代码示例 Object.is("1", 1); // false Object.is(NaN, NaN); // true Object.is(-0, +0); // false Object.is({}, {}); // false Object.is([], []); // false const obj = {}; Object.is(obj, obj); // true const arr = []; Object.is(arr, arr); // true
总结
Object.is
方法是一个非常实用的方法,它可以更准确地判断两个值是否相等。相比于 ==
和 ===
运算符,它不会进行类型转换,可以判断 NaN
,并且可以判断 -0
和 +0
。在实际开发中,我们可以使用 Object.is
方法来代替 ==
和 ===
运算符,从而避免类型转换和其他问题带来的 bug。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6578301bd2f5e1655d21603c