js中的 == 比较规则

前言

在 js 中,== 是一种宽松相等运算符,它会在比较两个操作数时,尝试进行类型转换,以便比较它们的值
如果类型不同是,两边的值都尽量转成number

== 的比较规则如下:

  • 如果操作数具有相同的类型,则按如下方式进行比较:
    • 对象(Object):仅当两个操作数引用同一个对象时返回 true ;
    • 字符串(String):只有当两个操作数具有相同的字符且顺序相同时才返回 true ;
    • 数值(Number):如果两个操作数的值相同,则返回 true 。+0 和 -0 被视为相同的值。如果任一操作数为 NaN ,则返回 false ;因此 NaN 永远不等于 NaN ;
    • 布尔值(Boolean):仅当操作数都是 true 或 false 时,才返回 true ;
    • 大整形(BigInt):仅当两个操作数具有相同的值时,才返回 true ;
    • 符号(Symbol):仅当两个操作数引用相同的符号时,才返回 true ;
  • 如果操作数之一为 null 或 undefined ,则另一个操作数必须为 null 或 undefined 才返回 true 。否则返回 false ;
  • 如果操作数之一是对象,而另一个是原始值, 则将对象转换为原始值 。在这一步骤中,两个操作数都被转换为原始值(String、Number、Boolean、Symbol 和 BigInt 之一);
  • 如果操作数中有一个是 Symbol,但另一个不是,则返回 false 。
  • 如果操作数之一是 Boolean,而另一个不是, 则将 Boolean 转换为 Number : true 转换为 1, false 转换为 0。然后再次对两个操作数进行宽松比较。
  • Number == String: 将 String 转换为 Number 。转换失败会得到 NaN ,这将确保相等性为 false 。
  • Number == BigInt:按照其数值进行比较。如果 Number 是 ±Infinity 或 NaN ,返回 false 。
  • String == BigInt: 使用与 BigInt () 构造函数相同的算法将字符串转换为 BigInt。如果转换失败,则返回 false 。
    *

猜你喜欢

转载自blog.csdn.net/olderandyanger/article/details/135299646