關(guān)于JavaScript中if(xx)和 a==b的判斷
if(xx)的判斷
if語句是編程語言最常用的語句,語法
if(condition){
//true statement
}else {
//false statement
}
其中condition可以是任意表達(dá)式郊艘,結(jié)果不一定是布爾值,JavaScript解釋器會(huì)自動(dòng)調(diào)用Boolean()將表達(dá)式結(jié)果轉(zhuǎn)為布爾值,如果表達(dá)式為真執(zhí)行第一個(gè)代碼塊內(nèi)語句,如果為假執(zhí)行第二個(gè)代碼塊內(nèi)語句舅列。
比如:
可以看到空字符串和空格字符串的輸出結(jié)果是不一致的,說明空字符串是false卧蜓,空格字符串是true帐要。
如何判斷JavaScript對(duì)類型轉(zhuǎn)換的結(jié)果是true還是false?
類型 | 結(jié)果 |
---|---|
Undefined | false |
Null | false |
Boolean | 直接判斷 |
Number | +0, ?0, 或者 NaN 為 false, 其他為 true |
String | 空字符串為 false,其他都為 true |
Object | true |
==的判斷
1.如果兩個(gè)值類型相同弥奸,則執(zhí)行嚴(yán)格相等的運(yùn)算
2.如果兩個(gè)值的類型不同
(1)如果一個(gè)是null榨惠,一個(gè)是undefined,那么相等
(2)如果一個(gè)是數(shù)字盛霎,一個(gè)是字符串赠橙,先將字符串轉(zhuǎn)為數(shù)字,然后比較
(3)如果一個(gè)值是true/false則將其轉(zhuǎn)為1/0比較
(4)如果一個(gè)值是對(duì)象愤炸,一個(gè)是數(shù)字或字符串期揪,則嘗試使用valueOf和toString轉(zhuǎn)換后比較
(5)其它就不相等了
我們用一個(gè)表來直觀的感受一下當(dāng)類型不同的時(shí)候,我們判斷的結(jié)果
x | y | 結(jié)果 |
---|---|---|
null | undefined | true |
Number | String | x == toNumber(y) |
Boolean | (any) | toNumber(x) == y |
Object | String or Number | toPrimitive(x) == y |
otherwise | otherwise | false |
這里就牽涉出一個(gè)問題规个,怎么知道toNumber和toPrimitive的結(jié)果呢,下面就是關(guān)于JavaScript對(duì)==的類型轉(zhuǎn)換
toNumber
type | Result |
---|---|
Undefined | NaN |
Null | 0 |
Boolean | ture -> 1, false -> 0 |
String | “abc” -> NaN, “123” -> 123 |
toPrimitive
對(duì)于 Object 類型凤薛,先嘗試調(diào)用 .valueOf 方法獲取結(jié)果。 如果沒定義诞仓,再嘗試調(diào)用 .toString方法獲取結(jié)果
以上就是我對(duì)這兩種判斷方式的知識(shí)整理缤苫,希望能夠幫助到需要的人。