前言
在 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 。
*