· if(statement)
對于括號中的statement,會被強制轉(zhuǎn)換為布爾類型慢逾,再進行判斷椎木。
對于六種數(shù)據(jù)進行轉(zhuǎn)換后的結(jié)果如下:
數(shù)據(jù)類型 | 條件判斷結(jié)果 |
---|---|
Undefined | false |
Null | false |
Boolean | 直接進行判斷 |
Number | +0,-0,或者NaN都為false缘揪,其余為true |
String | 空字符串為false,其余為true |
Object | true |
如上木西,在進行if條件判斷時畴栖,遵循上述原則,則可得到最終結(jié)果八千。
· A==B
對于三種基本數(shù)據(jù)類型以及復(fù)雜類型之間的判等比較吗讶,都是先調(diào)用
toNumber()
或toPrimitive()
方法轉(zhuǎn)換為數(shù)值燎猛,再進行比較,其余的情況則為確定結(jié)果照皆。
不同數(shù)據(jù)類型之前的判等比較原理如下:
A的數(shù)據(jù)類型 | B的數(shù)據(jù)類型 | 判等轉(zhuǎn)化 |
---|---|---|
Number | String | A==toNumber(B) |
Boolean | (any) | toNumber(A)==B |
Object | String / Number | toPrimitive(A)==B |
null | undefined | true |
otherwise | otherwise | false |
不同數(shù)據(jù)類型調(diào)用toNumber()
方法得到的結(jié)果如下表:
數(shù)據(jù)類型 | 結(jié)果 |
---|---|
undefined | NaN |
Null | 0 |
Boolean | true得到1重绷,false得到0 |
String | "abc"得到NaN,"123"得到123 |
Object 調(diào)用toPrimitive()
方法時膜毁,會先嘗試調(diào)用.valueOf
方法獲取結(jié)果昭卓,若未定義,則會嘗試調(diào)用.toString
方法獲取結(jié)果瘟滨。