if(xxx)括号中的表达式会被强制转换成布尔类型,其转化遵循如下规则:
undefined false
Null false
Boolean 根据实际布尔值true或false判断
Number +0,-0,0.0,NaN等为false,其余为true
String 空字符串为false,其余为true、
Object 均为true
关于a == b的判断,可分为两种情况:
1. 如果两个值类型相同,则执行严格相等的运算来判断;
2. 如果两个值类型不同:
①一个null,一个undefined,相等;
②一个数字,另一个字符串,先将字符串转换成数字,然后比较,如‘8’ == 8为true,可先将字符串‘8’转换成数字8,然后比较,‘’ == 1为false,因为‘’转化成数字为0,不等于1;
③其中一个为true/false,将其转化成1/0进行比较,如"hello" == true,字符串"hello"转化成数字为NaN,true转化成数字是1,故结果为false,在如"0" == false,"0"转化成数字为0,false转化成数字也是0,所以结果为true;
④如果一个是对象,另一个是数字或字符串,则尝试使用valueof和toString转换后进行比较,如var obj = {
a: 0,
valueOf: function(){return 1}
}
obj == "[object Object]",将obj转换成valueof值1,故不相等,结果为false。
附:不同类型变量转换成数字规则
undefined NaN
Null 0
Boolean true为1,false为0
string "abc"等为NaN,"123"转换成对应数字