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

一. if(xx)的判斷

JavaScript 遇到預期為布爾值的地方(比如if語句的條件部分),就會將非布爾值的參數自動轉換為布爾值。系統內部會自動調用Boolean函數。

  1. 當if括號里面的表達式為Boolean時,直接判斷
if (true){
   console.log("true"); //true
}
if (false){
   console.log("true"); //false
}
  1. 當if括號里面的表達式為Number時,分兩種情況,當number為+0,-0,NaN的時候,為false;其他為true。
if(0){
  console.log("true"); //false
}
if(NaN){
  console.log("true"); //false
}
if(1){
  console.log("true"); //true
}

3.當if括號里面的表達式為String時,空字符串為false,其他為true;

if(""){
  console.log("true"); //false
}
if("abc"){
  console.log("true"); //true
}

4.當if括號里面的表達式為Undefined時,為false;

if(Undefined){
  console.log("true"); //false
}

5.當if括號里面的表達式為null時,為false;

if(null){
  console.log("true"); //false
}

toBoolean

類型 結果
undefined false
null false
Boolean 直接判斷
string ""(空字符串)為false,其他為true
Object true
Number +0,-0,Nan為false,其他為true

二. a==b的判斷

==是比較兩個值是否相等,相同類型直接比較,不同類型的話,看情況轉換。

  1. String==Number --->toNumber(String)==Number
"" = 0 ; //true,因為“”轉換為0
"  " = 0 ; //true
"hello" == 1  //false  ,因為"hello"轉換為NaN
"hello" == 0 //false,同理
  1. Boolean==(any) --->toNumber(Boolean)==(any)
1==true; //true,因為true轉換為1
0==false;//true ,因為false轉換為0
"0" == true  //false
"0" == false  //true
"00" == false  //true
"0.00" == false  //true
  1. Object==String/Number---->toPrimitive(Object)
    對于 Object 類型,先嘗試調用 .valueOf 方法獲取結果。 如果沒定義,再嘗試調用 .toString方法獲取結
{} == true  // false
[] == true  //false
var obj = { 
  a: 0, 
  valueOf: function(){return 1} 
} 
obj == "[object Object]"  //false
obj == 1  //true
obj == true  //true
  1. null==undefined,//true
  • ==知識點
    如果兩個值類型相同,則執行嚴格相等的運算
    如果兩個值的類型不同
    如果一個是null,一個是undefined,那么相等
    如果一個是數字,一個是字符串,先將字符串轉為數字,然后比較
    如果一個值是true/false則將其轉為1/0比較
    如果一個值是對象,一個是數字或字符串,則嘗試使用valueOf和toString轉換后比較
    其它就不相等了

toNumber

類型 結果
Undefined NaN
Null 0
Boolean ture->1,false->0
String (""-->0, " "-->0 )空字符串與空白字符串轉換數值0,abc"->NaN,"123"->123
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。