1. 规则概述
- 字符串与数字比较:将字符串转换为数字进行比较。
- 布尔值与其他类型比较:布尔值
true
转换为 1
,false
转换为 0
后再进行比较。
- 对象与其他类型比较:对象通过
ToPrimitive
抽象操作转换为原始值,一般先尝试调用 valueOf
方法,如果返回的不是原始值,再调用 toString
方法。
2. 举例说明
- 字符串与数字比较
'5' == 5;
// 这里 '5' 会被转换为数字 5,5 == 5 结果为 true
- 布尔值与数字比较
true == 1;
// true 转换为 1,1 == 1 结果为 true
false == 0;
// false 转换为 0,0 == 0 结果为 true
- 对象与数字比较
const obj = { valueOf: function() { return 5; } };
obj == 5;
// obj 通过 valueOf 方法转换为 5,5 == 5 结果为 true
const arr = [5];
arr == 5;
// arr 先调用 valueOf 方法返回自身不是原始值,再调用 toString 方法返回 '5','5' 转换为 5,5 == 5 结果为 true