1. 程式人生 > >javascript bool 強制型別轉換

javascript bool 強制型別轉換

javascript中if條件何時為true呢? 除了有一些能直接比較出結果的表示式之外,對於直接將變數放入if 括號中,何時為true,何時為false呢。下面看具體例子。

var a;
 
 if(a)
 
 {
  alert("true");
  }
   
else
  
 {
   alert("false");
   }
執行結果為 false


var a=1;
 
 if(a)
 
 {
  alert("true");
  }
   
else
  
 {
   alert("false");
   }
執行結果為 true

var a=0;
 
 if(a)
 
 {
  alert("true");
  }
   
else
  
 {
   alert("false");
   }
執行結果為 false

var a=true;//或者a="true"
 
 if(a)
 
 {
  alert("true");
  }
   
else
  
 {
   alert("false");
   }
執行結果為 true

var a=false;//或者a="false"
 
 if(a)
 
 {
  alert("true");
  }
   
else
  
 {
   alert("false");
   }
執行結果為 false

此處的大小寫是不區分的。


var a="";
 if(a)
 
 {
  alert("true");
  }
   
else
  
 {
   alert("false");
   }
執行結果為 false

var a="1212";//非空字串,並且不為"false"
// 注意包含空格的字串也是非空的 ("   ")
 if(a)
 
 {
  alert("true");
  }
   
else
  
 {
   alert("false");
   }
執行結果為 true


其本質就是js中強制型別轉換的結果,也就是其他非bool型別轉換成bool型別,js處理如下:

對於var a;

1. 如果a未賦值,則為null,會被強制轉換為false;

2, 如果a為數值型別的話, 0 或0.000 為false,其他非0值為true;

3. 如果a為字串的話, “” 和“false” 會被轉換成false, 注意“false” 是不區分大小寫的,就是說“False”,"FAlse"等都會被轉換成false。

    其他字串被轉換成true 包括含有空格的空字串(“     ”)。

4.如果a是其他型別:陣列,function,物件,則會被轉換成true;

有一種a為function需要說明,看下面例子:

var a=function(){};
  
  if( a())
  {
  alert("true");
  }
   else
   {
   alert("false");
   }
結果為false.

原因是沒有返回結果的函式值的返回結果是 undefined。而undefined 會被當做false 處理。

注意: if(a) 和if(a()) 是完全不同的。if(a)是會一直返回true的,因為他是將函式強制轉換。但是if((a))是將函式的返回結果強制轉換。