一.if(XX)的判斷
對(duì)于括號(hào)里的表達(dá)式,非布爾類型會(huì)被強(qiáng)制轉(zhuǎn)換為布爾類型.
1.當(dāng)if括號(hào)里面的表達(dá)式為Undefined時(shí),為false;
if(undefined){
console.log("true"); //false 不輸出
}
2.當(dāng)if括號(hào)里面的表達(dá)式為null時(shí),為false;
if(null){
console.log("true"); //false 不輸出
}
3.當(dāng)if括號(hào)里面的表達(dá)式為Boolean時(shí),直接判斷;
if (true){
console.log("true"); //true 輸出true
}
if (false){
console.log("true"); //false 不輸出
}
4.當(dāng)if括號(hào)里面的表達(dá)式為字符串時(shí), ""空字符串為false,其他為true;
if(""){
console.log("true"); //false 不輸出
}
if(" "){
console.log("true"); //true 輸出true
}
5.當(dāng)if括號(hào)里面的表達(dá)式為Object時(shí),為true;
if(Object){
console.log("true"); //true 輸出true
}
6.當(dāng)if括號(hào)里面的表達(dá)式為Number時(shí), +0,-0,Nan為false,其他為true
if(+0){
console.log("true"); //false 不輸出
}
if(1){
console.log("true"); //true 輸出true
}
原理
| 類型 | 結(jié)果 |
|---|---|
| undefined | false |
| null | false |
| Boolean | 直接判斷 |
| string | ""(空字符串)為false,其他為true |
| Object | true |
| Number | +0,-0,Nan為false,其他為true |
二.aa==bb的判斷
在javascript判斷兩個(gè)變量值是否相等,可以使用==(相等)操作符
== 簡(jiǎn)單判斷2個(gè)變量值是否相等,變量類型不一致時(shí),會(huì)做類型轉(zhuǎn)換,即忽略變量的類型進(jìn)行比較
1.String==Number --->(toNumber(String)==Number )
"" = 0 ; //true,因?yàn)椤啊鞭D(zhuǎn)換為0
" " = 0 ; //true " "轉(zhuǎn)換為0
"hello" == 1 //false ,因?yàn)?hello"轉(zhuǎn)換為NaN
"hello" == 0 //false, 同理
2.Boolean==(any) --->(toNumber(Boolean)==(any))
1==true; //true,因?yàn)閠rue轉(zhuǎn)換為1
0==false;//true ,因?yàn)閒alse轉(zhuǎn)換為0
"0" == true //false
"0" == false //true
"00" == false //true
"0.00" == false //true
3.Object==String/Number---->(toPrimitive(Object))
對(duì)于 Object 類型,先嘗試調(diào)用 .valueOf 方法獲取結(jié)果。 如果沒定義,再嘗試調(diào)用 .toString方法獲取結(jié)
果
{} == true // false
[] == true //false
var obj = {
a: 0,
valueOf: function(){return 1}
}
obj == "[object Object]" //false
obj == 1 //true
obj == true //true
4.null==undefined,//true
toNumber
| 類型 | 結(jié)果 |
|---|---|
| Undefined | NaN |
| null | 0 |
| Boolean | ture->1,false->0 |
| string | “abc” -> NaN, “123” -> 123 |
如果兩個(gè)值類型相同,則執(zhí)行嚴(yán)格相等的運(yùn)算
如果兩個(gè)值的類型不同
如果一個(gè)是null,一個(gè)是undefined,那么相等
如果一個(gè)是數(shù)字,一個(gè)是字符串,先將字符串轉(zhuǎn)為數(shù)字,然后比較
如果一個(gè)值是true/false則將其轉(zhuǎn)為1/0比較
如果一個(gè)值是對(duì)象,一個(gè)是數(shù)字或字符串,則嘗試使用valueOf和toString轉(zhuǎn)換后比較
其它就不相等了