-
在所有編程語言中if是最長用的判斷之一,但在js中到底哪些東西可以在if中式作為判斷表達式呢?
例如如何幾行,只是少了一個括號,真假就完全不同,到底表示什么含義呢?
1第一類已定義的變量但未賦值在if中認為是假
View Codevar obj={}; obj.Funtext=function(){}; if(obj.Funtext) { alert("true obj.Funtext;"); } else { alert("false obj.Funtext"); } obj.Funtext=function(){}; if(obj.Funtext()) { alert("true obj.Funtext();"); } else { alert("false obj.Funtext()"); }
例如:
View Codevar t; if(t) { alert("true 已定義未賦值"); } else { alert("false 已定義未賦值"); }
2第二類已定義的變量,賦值為空字符串在if中認為是假,賦值為其他的字符串,也就是是字符串中有字符就認為是真例如:
if判斷是假
View Codevar t; t=""; if(t) { alert("true t='';"); } else { alert("false t=''"); }
再例如:
if判斷是真,也就是對於字符串類型,只要有字符,即使是空格字符if判斷也為真。
View Codevar t; t=" "; if(t) { alert("true t=' ';"); } else { alert("false t=' '"); } t="111"; if(t) { alert("true t='111';"); } else { alert("false t='111'"); }
3第三類已定義的變量,賦值為true在if中認為是真,賦值為false,則為假,這和其他語言中bool的類型的變量是一樣的。
例如:
4第四類已定義的變量,賦值為0在if中則為假,其他數值認為是真,這和c語言中數值的類型的變量是一樣的。
View Codevar t; t=false; if(t) { alert("true t=false;"); } else { alert("false t=false;"); } t=true; if(t) { alert("true t=true;"); } else { alert("false t=true;"); }
例如:
測試發現不管是0,還是0.0都是假
View Codevar t; t=0; if(t) { alert("true t=0;"); } else { alert("false t=0;"); } t=0.0; if(t) { alert("true t=0.0;"); } else { alert("false t=0.0;"); }
-
發現非0是都是真
View Codevar t; t=2; if(t) { alert("true t=2;"); } else { alert("false t=2;"); }
5第五類js中的特殊值null,undefined,都是假
由於在js中未定義的變量默認值是undefined,因此這也就就解釋了第一類情況
View Codevar t=null; if(t) { alert("true t=null;"); } else { alert("false t=null;"); } t=undefined; if(t) { alert("true t=undefined;"); } else { alert("false t=undefined;"); }
6第六類已定義的函數,根據調用方式又分為兩種
第一種:不帶括號的,如果定義了就是真,沒有定義會報錯
第二種:帶括號的,其實相當於調用函數,自然是根據函數的返回值判斷真假
View Codefunction testfunction(){} if(testfunction) { alert("true testfunction;"); } else { alert("false testfunction;"); }
例如:
是假,是因為,函數如果沒有定義返回值值,則返回值是undefinedfunction testfunction(){} if(testfunction()) { alert("true testfunction;"); } else { alert("false testfunction;"); }
7第七類已定義的對象,未賦值時在if中則為假,賦值后是真。
例如:
其實由於在js中變量在沒有賦值時是沒有類型的,因此和第一種情況是一樣的。
View Codevar obj; if(obj) { alert("true obj;"); } else { alert("false obj;"); }
但在賦值后,就會變成真,例如:
8第八類已定義的對象的屬性字段,和單獨的變量是一樣的,例如數值型為0時是假,其他為真,字符串型是為空值時是假,其他為真。
View Codevar obj; obj={}; if(obj) { alert("true obj={};"); } else { alert("false obj={};"); }
例如
9第九類已定義的對象的方法,和單獨的函數是一樣的,
View Codevar obj={}; obj.Text=""; if(obj.Text) { alert("true obj.Text;"); } else { alert("false obj.Text"); } obj.Text="Text"; if(obj.Text) { alert("true obj.Text;"); } else { alert("false obj.Text"); } obj.Text=0; if(obj.Text) { alert("true obj.Text;"); } else { alert("false obj.Text"); } obj.Text=1; if(obj.Text) { alert("true obj.Text;"); } else { alert("false obj.Text"); }
不加括號是如果沒定義就是假,
View Codevar obj={}; obj.Funtext=function(){}; if(obj.Funtext) { alert("true obj.Funtext;"); } else { alert("false obj.Funtext"); } if(obj.Funtext1)//未定義屬性,也沒有定義方法 { alert("true obj.Funtext1;"); } else { alert("false obj.Funtext1"); }
加了括號相當於調用方法,就是根據返回值判斷真假。
View Codevar obj={}; obj.Funtext=function(){}; if(obj.Funtext()) { alert("true obj.Funtext();"); } else { alert("false obj.Funtext()"); } obj.Funtext2=function(){ return "ff"}; if(obj.Funtext2()) { alert("true obj.Funtext2();"); } else { alert("false obj.Funtext2()"); }
可以看到在js中可以在if中作為判斷的類型很多,但最終都可以看做這些類型的變形。只要掌握了這些最基本的,就可以靈活運用if判斷了。
最基本是null,undefined,if判斷都是假;對於數值類型,0是假,其他為真;對於字符類型空字符串是假,其他為真,對於方法屬性,如果定義了就是真,否則就是假,其他所有都可以看做是這些的變相應用。
轉載地址:紅黑聯盟 http://www.2cto.com/kf/201407/314978.html
