利用 ECMAScript 2021(ES12)中的 Object.is 处理判断值相等的问题

在前端开发中,我们经常需要判断两个值是否相等。然而,JavaScript 中的相等判断并不完全符合我们的预期,因为它会进行类型转换。例如,使用 ===== 运算符判断 "1"1 是否相等,结果是不相等的。

为了解决这个问题,ECMAScript 2021(ES12)引入了一个新的方法 Object.is,它可以更准确地判断两个值是否相等。

Object.is 的用法

Object.is 方法接受两个参数,它们是要比较的两个值。如果这两个值相等,返回 true;否则返回 false

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 方法的示例代码:

总结

Object.is 方法是一个非常实用的方法,它可以更准确地判断两个值是否相等。相比于 ===== 运算符,它不会进行类型转换,可以判断 NaN,并且可以判断 -0+0。在实际开发中,我们可以使用 Object.is 方法来代替 ===== 运算符,从而避免类型转换和其他问题带来的 bug。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6578301bd2f5e1655d21603c


纠错
反馈