== 运算符规则
- 如果有一个操作数是布尔值,则先转换为数值:
false → 0, true → 1 - 如果一个操作数为字符串,另一个为数值,则将字符串用
Number()转换 - 如果一个操作数是对象,另一个不是,则调用对象的
valueOf()方法
true == 1; // true
"1" == 1; // true (Number("1") == 1)
"1a" == 1; // false (Number("1a") → NaN)
特殊规则
null == undefined→truenull和undefined比较前不转换- 如果有一个操作数是
NaN则恒返回false - 如果两个操作数都是对象,则比较是否是同一个引用
new Boolean(true) == true; // true (调用 valueOf)
new Boolean(true) == new Boolean(true); // false (不同对象)
===
不进行类型转换,直接比较值和类型。