在所有編程語言中if、while、for等語句,需要進行條件判斷,if是最長用的判斷之一,通過if看看作為判斷真假有那些?
1. 第一類已定義的變量但未賦值在if中認為是假
var t; if(t) { alert("true"); } else { alert("false"); }
2. 第二類已定義的變量,賦值為空字符串在if中認為是假,賦值為其他的字符串,也就是是字符串中有字符就認為是真
var t; t=""; if(t) { alert("true"); } else { alert("false"); }
結果: if判斷是假
--------------------------------------------------------------------------------------------------
var t; t=" "; if(t) { alert("true"); } else { alert("false"); } t="111"; if(t) { alert("true"); } else { alert("false"); }
結果: if判斷是真,也就是對於字符串類型,只要有字符,即使是"空格字符"if判斷也為真。
3. 第三類已定義的變量,賦值為true在if中認為是真,賦值為false,則為假,這和其他語言中bool的類型的變量是一樣的。
var t; t=false; if(t) { alert("true"); } else { alert("false"); }
結果: false
------------------------------------------------------------------------------------------------------
t=true; if(t) { alert("true"); } else { alert("false"); }
結果: true
4. 第四類已定義的變量,賦值為0在if中則為假,其他數值認為是真,這和c語言中數值的類型的變量是一樣的。
var t; t=0; if(t) { alert("true"); } else { alert("false"); }
結果: false
---------------------------------------------------------------------------------------------------------
t=0.0; if(t) { alert("true"); } else { alert("false"); }
結果: false
測試發現不管是0,還是0.0都是假
--------------------------------------------------------------------------------------------------
var t; t=2; if(t) { alert("true"); } else { alert("false"); }
結果: true。 發現非0都是真
5. 第五類js中的特殊值null,undefined,都是假
var t=null; if(t) { alert("true"); } else { alert("false"); }
結果: false
---------------------------------------------------------------------------------------------------------
t=undefined; if(t) { alert("true t=undefined;"); } else { alert("false t=undefined;"); }
結果: false
由於在js中未定義的變量默認值是undefined,因此這也就解釋了第一類情況
6. 第六類已定義的函數,根據調用方式又分為兩種
第一種:不帶括號的,如果定義了就是真,沒有定義會報錯
function testfunction(){} if(testfunction) { alert("true"); } else { alert("false"); }
第二種:帶括號的,其實相當於調用函數,自然是根據函數的返回值判斷真假
function testfunction(){} if(testfunction()) { alert("true"); } else { alert("false"); }
是假,是因為,函數如果沒有定義返回值,則返回值是undefined
7. 第七類已定義的對象,未賦值時在if中則為假,賦值后是真。
var obj; if(obj) { alert("true"); } else { alert("false"); }
其實由於在js中變量在沒有賦值時是沒有類型的,因此和第一種情況是一樣的。
但在賦值后,就會變成真,例如:
var obj; obj={}; if(obj) { alert("true"); } else { alert("false"); }
8. 第八類已定義的對象的屬性字段,和單獨的變量是一樣的,例如數值型為0時是假,其他為真,字符串型是為空值時是假,其他為真。
var obj={}; obj.Text=""; if(obj.Text) { alert("true"); } else { alert("false"); }
結果: false
----------------------------------------------------------------------------------------------------------
obj.Text="Text"; if(obj.Text) { alert("true"); } else { alert("false"); }
結果: true
----------------------------------------------------------------------------------------------------------
obj.Text=0; if(obj.Text) { alert("true"); } else { alert("false"); }
結果: false
-----------------------------------------------------------------------------------------------------------
obj.Text=1; if(obj.Text) { alert("true"); } else { alert("false"); }
結果: true
9. 第九類已定義的對象的方法,和單獨的函數是一樣的。
不加括號是如果沒定義就是假。
var obj={}; obj.Funtext=function(){}; kif(obj.Funtext) { alert("true"); } else { alert("false"); }
if(obj.Funtext1)//未定義屬性,也沒有定義方法 { alert("true"); } else { alert("false"); }
加了括號相當於調用方法,就是根據返回值判斷真假。
var obj={}; obj.Funtext=function(){}; if(obj.Funtext()) { alert("true"); } else { alert("false"); }
obj.Funtext2=function(){ return "ff"}; if(obj.Funtext2()) { alert("true"); } else { alert("false"); }
總結:最基本是null,undefined,if判斷都是假;對於數值類型,0是假,其他為真;對於字符類型空字符串是假,其他為真,對於方法屬性,如果定義了就是真,否則就是假,其他所有都可以看做是這些的變相應用。