返回

深入理解 JavaScript 中的 ==, === 和 Object.is()

前端

JavaScript 中 ==、=== 和 Object.is 的等式比较

了解 JavaScript 相等性比较的选项。什么是抽象相等?什么是严格相等,以及 Object.is() 方法有何不同?

传统上 JavaScript 提供了 2 个用于相等比较的特殊运算符:

==   // 抽象相等比较
===  // 严格相等比较

抽象相等比较 (==)

抽象相等比较(==)通常用于松散相等比较,允许两种不同的数据类型以松散的方式进行比较。在执行比较之前,它会对两种数据类型执行类型转换。

  • 类型转换:在进行比较之前,会将一种数据类型转换为另一种数据类型。
  • 数值类型:对于数值,== 会将字符串转换为数字,而不管字符串中是否包含非数字字符。
  • 布尔型:对于布尔值,== 会将字符串转换为布尔值,字符串“true”转换为 true,其他字符串转换为 false
  • 对象:对于对象,== 会比较对象的引用,而不是对象的实际值。

严格相等比较 (===)

严格相等比较 (===) 与抽象相等比较 (==) 类似,但它不会进行任何类型转换。如果两种数据类型不相同,它将返回 false

  • 不进行类型转换:严格相等比较不会对数据类型进行任何转换,而只比较其值。
  • 数值类型:对于数值,=== 不会将字符串转换为数字,也不会尝试转换包含非数字字符的字符串。
  • 布尔型:对于布尔值,=== 不会将字符串转换为布尔值。
  • 对象:对于对象,=== 会比较对象的实际值,而不是对象的引用。

Object.is() 方法

Object.is() 方法与严格相等比较 (===) 类似,但它提供了额外的功能,允许比较 NaN 和 -0。

  • NaN 和 -0:Object.is() 会将 NaN 与自身相比较,并将 -00 相比较。

何时使用抽象相等比较 (==)?

  • 当您想要比较两种不同类型的数据时,可以使用抽象相等比较 (==)。例如,您可以比较一个字符串和一个数字,或一个对象和一个字符串。

何时使用严格相等比较 (===)?

  • 当您想要确保比较两种数据类型的实际值时,可以使用严格相等比较 (===)。例如,您可能想要比较两个字符串以确保它们包含相同的字符,或比较两个对象以确保它们具有相同的属性。

何时使用 Object.is() 方法?

  • 当您想要比较 NaN 和 -0 时,可以使用 Object.is() 方法。

小贴士

  • 在大多数情况下,建议使用严格相等比较 (===) 来确保比较两种数据类型的实际值。
  • 如果您需要比较不同类型的数据,则可以使用抽象相等比较 (==)。
---- END ----