JavaScript里面的 == 常常让人摸不着头脑,这次索性根据红宝书记录一下。
同一类型的比较自然没什么多说的,不同类型的则会发生强制类型转换。
- 如果有一方为布尔值,则会将布尔值转为数值(true转为1,false转为0)再进行比较
- 如果有一方为数值,一方为字符串,则会先将字符串转为数值再比较
- 如果有一方为对象,则会先调用对象的 valueOf 方法,再对返回值进行比较
- null 和 undefined不会发生强制类型转换,且 null == undefined
- NaN和任何值都不相等
"1" == true; // true
"2" == true; // false
"0" == false; // false
"8" == 8; // true
let obj = {
str: '字符',
valueOf: function () {
return 8;
}
};
obj == 8; // true
null == undefined; // true
null == 8; // false
undefined == 8; // false
NaN == 8; // false
NaN == NaN; // false