if(xx)
if会把xx转化为boolean型
if与String
例:
if("hello"). =>true
if(" ") =>true
if("") =>false
结论:空字符串返回false,其他字符串返回true
if与number
if(-0) =>false
if(NaN) =>false
if(+0) =>false
if(4) =>true
结论:+-0或者NaN为false,其他为true
总结:
类型 | 结果 |
---|---|
Undefined | false |
null | false |
boolean | 直接判断 |
number | +-0,+-0.0、NaN为false,其他为true |
object | true |
==判真
基本原则:把等号两边都转换为number型再进行比较
易错1:
"hey" == true
"hey" == false
以上输出皆为false,因为string类型会转换为number类型,“hey”=>NaN,所以为false
而“123”=>123
易错2:
undefined == null //true
undefined == false //false
undefined == null为特殊例子
undefined会被转换为NaN
而null一般转换为0
易错3:
""==0
""==false
" "==false
以上皆为真,空字符串或字符串为空格转换为false
易错点4--对象:
false==[] //true
总结:
x | y | 结果 |
---|---|---|
number | string | x==toNumber(y) |
boolean | (any) | toNumber(x)==y |
object | string or number | toPrimitive(x)==y |
otherwis | otherwise | false |
其中toPrimitive,对于object对象,先尝试调用.valueOf()方法获取结果,再尝试调用toString()方法获取结果