详解if(statement)以及A==B判断原则
2018-12-10 本文已影响0人
innerwang
· if(statement)
对于括号中的statement,会被强制转换为布尔类型,再进行判断。
对于六种数据进行转换后的结果如下:
数据类型 | 条件判断结果 |
---|---|
Undefined | false |
Null | false |
Boolean | 直接进行判断 |
Number | +0,-0,或者NaN都为false,其余为true |
String | 空字符串为false,其余为true |
Object | true |
如上,在进行if条件判断时,遵循上述原则,则可得到最终结果。
· A==B
对于三种基本数据类型以及复杂类型之间的判等比较,都是先调用
toNumber()
或toPrimitive()
方法转换为数值,再进行比较,其余的情况则为确定结果。
不同数据类型之前的判等比较原理如下:
A的数据类型 | B的数据类型 | 判等转化 |
---|---|---|
Number | String | A==toNumber(B) |
Boolean | (any) | toNumber(A)==B |
Object | String / Number | toPrimitive(A)==B |
null | undefined | true |
otherwise | otherwise | false |
不同数据类型调用toNumber()
方法得到的结果如下表:
数据类型 | 结果 |
---|---|
undefined | NaN |
Null | 0 |
Boolean | true得到1,false得到0 |
String | "abc"得到NaN,"123"得到123 |
Object 调用toPrimitive()
方法时,会先尝试调用.valueOf
方法获取结果,若未定义,则会尝试调用.toString
方法获取结果。