關(guān)于if(xx)和 a==b的判斷

一.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)換后比較
其它就不相等了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容