面試筆試中你或許會(huì)看到關(guān)于“if(xxx)”和“==”的判斷
關(guān)于if(xxx)的判斷
題目:如下代碼會(huì)輸出什么军浆?
if("hello"){
console.log('hello');
}
if(""){
console.log('輸出');
}
if(" "){
console.log('空格');
}
if([0]){
console.log('數(shù)組');
}
if('0'){
console.log('數(shù)字0');
}
我們需要從原理上去理解呐萨,所以js是如何處理的呢帜羊?
js會(huì)將括號(hào)里的內(nèi)容強(qiáng)制轉(zhuǎn)換成布爾類(lèi)型,true就會(huì)輸出市袖,flase就不會(huì)輸出
下面是不同類(lèi)型轉(zhuǎn)換成布爾型的規(guī)律谴分,我們只需要記住這些規(guī)律就可以了
類(lèi)型 | 轉(zhuǎn)換后的結(jié)果 |
---|---|
undefined | false |
Null | false |
Boolean | 直接判斷 |
Number | +0,-0或NaN都為false锈麸,其他為true |
String | 空字符串為false,其他都為true |
Obiect | true |
用這些規(guī)律再去看題牺蹄,就會(huì)很清晰了
關(guān)于“ == ”的判斷
題目:如下代碼會(huì)輸出什么忘伞?
"" == 0; //題目1
" " == 0; //題目2
"" == true; //題目3
"hello" == true; //題目4
"0" == true; //題目5
null == undefined; //題目6
var obj = {
a : 0,
valueOf: function(){return 1}
}
obj == "[object object]"; //題目7
obj == 1; //題目8
obj == true; //題目9
我第一次看到它們的時(shí)候,很想說(shuō),這到底是什么氓奈。翘魄。。舀奶。暑竟。
后來(lái)通過(guò)老師的講解,知道了js面對(duì)這些代碼時(shí)它的處理方式是什么
js會(huì)將String類(lèi)型育勺,Boolean類(lèi)型會(huì)To Number但荤,Object類(lèi)型會(huì)To Primitive!涧至!
To Number
類(lèi)型 | To Number |
---|---|
undefined | NaN |
Null | 0 |
Boolean | true -- 1,false -- 0 |
String | "abc" -- NaN ,"123" -- 123 |
To Primitive
先嘗試掉調(diào)用valueOf方法獲取結(jié)果腹躁,如果沒(méi)有定義再?lài)L試調(diào)用toString方法獲取結(jié)果
當(dāng)然除了上面這些規(guī)律,我們還要單獨(dú)記住兩點(diǎn)
- null == undefined 的結(jié)果為true
- 其他的類(lèi)型 == 后為false