在js里面,在使用if語(yǔ)句的時(shí)候,我們都知道英妓,使用嚴(yán)格相等運(yùn)算符===來(lái)進(jìn)行條件判斷第步,但是在日常工作中,我們可能經(jīng)常會(huì)碰到這種代碼:
if(xxx){
...
}
或者是
if(xxx==0){
...
}
那么這種情況下,if里面的條件是否成立,看起來(lái)就要花費(fèi)一番心思了,而且有的時(shí)候的結(jié)果可能并非符合直覺(jué)仔拟。接下來(lái)就來(lái)解密一下當(dāng)遇到上面兩種情況時(shí),條件到底何時(shí)能夠成立呢
if(xxx)的情況
以下幾個(gè)場(chǎng)景的結(jié)果分別是多少飒赃?
if ("hello") {
console.log("hello")
}
if ("") {
console.log('empty')
}
if (" ") {
console.log('blank')
}
if ([0]) {
console.log('array')
}
if('0.00'){
console.log('0.00')
}
如果沒(méi)有了解一定的規(guī)則利花,只憑直覺(jué)來(lái)判斷的話,以上的代碼很難估計(jì)出正確的結(jié)果载佳。但是我們可以了解if(xxx)判斷的規(guī)則后再去看炒事,那么結(jié)果可能就顯而易見(jiàn)了
對(duì)于if括號(hào)里的表達(dá)式,會(huì)被強(qiáng)制轉(zhuǎn)換為布爾類(lèi)型蔫慧,而轉(zhuǎn)換的規(guī)則如下
類(lèi)型 | 結(jié)果 |
---|---|
Undefined | false |
Null | false |
Boolean | 直接判斷 |
Number | +0, ?0, 或者 NaN 為 false, 其他為 true |
String | 空字符串為 false,其他都為 true |
Object | true |
有了這個(gè)規(guī)則之后挠乳,再回頭去看上面的問(wèn)題,不難得出結(jié)果姑躲,分別為:
true false true true true
xxx==xx的情況
類(lèi)似的睡扬,我們來(lái)看看不同類(lèi)型的值使用==比較的結(jié)果
有如下問(wèn)題
!" " == false
"0" == false
"00" == false
"0.00" == false
undefined == null
{} == true
[] == true
var obj = {
a: 0,
valueOf: function(){return 1}
}
obj == "[object Object]"
obj == 1
obj == true
下表為==相等運(yùn)算符的轉(zhuǎn)換規(guī)則
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 |
toNumber
type | Result |
---|---|
Undefined | NaN |
Null | 0 |
Boolean | ture -> 1, false -> 0 |
String | “abc” -> NaN, “123” -> 123 |
toPrimitive
對(duì)于 Object 類(lèi)型,先嘗試調(diào)用 .valueOf 方法獲取結(jié)果黍析。 如果沒(méi)定義卖怜,再嘗試調(diào)用 .toString方法獲取結(jié)果
從上方表格可以看出,當(dāng)數(shù)字和字符串比較時(shí)阐枣,會(huì)將字符串轉(zhuǎn)換為數(shù)字韧涨,而對(duì)象和字符串做比較時(shí),會(huì)調(diào)用對(duì)象的valueOf或toString方法進(jìn)行轉(zhuǎn)換
因此上面的答案分別為
true
true
true
true
true
false
false
fasle
true
true
總結(jié)
雖然我們了解了上述兩種情況的類(lèi)型轉(zhuǎn)換規(guī)則侮繁,但是在日常工作中還是建議使用規(guī)范的if(xxx===xx)的嚴(yán)格相等運(yùn)算符的格式,否則可能會(huì)帶來(lái)意想不到的副作用如孝,也會(huì)給團(tuán)隊(duì)其他成員帶來(lái)理解上的困擾