javascript中 if條件語句中的判斷條件類型總結


在所有編程語言中if是最長用的判斷之一,但在js中到底哪些東西可以在if中式作為判斷表達式呢?

例如如何幾行,只是少了一個括號,真假就完全不同,到底表示什么含義呢

 1 var obj={};
 2  obj.Funtext=function(){};
 3     if(obj.Funtext)
 4    {
 5      alert("true  obj.Funtext;");
 6    }
 7    else
 8    {
 9      alert("false  obj.Funtext");
10    }
11    obj.Funtext=function(){};
12     if(obj.Funtext())
13    {
14      alert("true  obj.Funtext();");
15    }
16    else
17    {
18      alert("false  obj.Funtext()");
19    }

 

1第一類已定義的變量但未賦值在if中認為是假

例如:

1 var  t;
2           if(t)
3           {
4             alert("true 已定義未賦值");
5           }
6           else
7           {
8             alert("false 已定義未賦值");
9           }        

 

2第二類已定義的變量,賦值為空字符串在if中認為是假,賦值為其他的字符串,也就是是字符串中有字符就認為是真

例如

 1 var  t;
 2           t=" ";
 3           if(t)
 4           {
 5             alert("true t=' ';");
 6           }
 7           else
 8           {
 9             alert("false t=' '");
10           }
11            t="111";
12           if(t)
13           {
14             alert("true t='111';");
15           }
16           else
17           {
18             alert("false t='111'");
19           }

 

if判斷是真,也就是對於字符串類型,只要有字符,即使是空格字符if判斷也為真。

 

3第三類已定義的變量,賦值為true在if中認為是真,賦值為false,則為假,這和其他語言中bool的類型的變量是一樣的。

例如:

 1 var  t;
 2  t=false;
 3  if(t)
 4  {
 5    alert("true  t=false;");
 6  }
 7  else
 8  {
 9    alert("false  t=false;");
10  }
11   t=true;
12  if(t)
13  {
14    alert("true  t=true;");
15  }
16  else
17  {
18    alert("false  t=true;");
19  }

 

4第四類已定義的變量,賦值為0在if中則為假,其他數值認為是真,這和c語言中數值的類型的變量是一樣的。

 

例如:

 1 var  t;
 2  t=0;
 3  if(t)
 4  {
 5    alert("true  t=0;");
 6  }
 7  else
 8  {
 9    alert("false  t=0;");
10  }
11   t=0.0;
12  if(t)
13  {
14    alert("true  t=0.0;");
15  }
16  else
17  {
18    alert("false  t=0.0;");
19  }

測試發現不管是0,還是0.0都是假

 

 1 var  t;
 2   t=2;
 3  if(t)
 4  {
 5    alert("true  t=2;");
 6  }
 7  else
 8  {
 9    alert("false  t=2;");
10  }

 

發現非0是都是真

 

5第五類js中的特殊值null,undefined,都是假

 1 var  t=null;
 2            if(t)
 3            {
 4              alert("true  t=null;");
 5            }
 6            else
 7            {
 8              alert("false  t=null;");
 9            }
10             t=undefined;
11            if(t)
12            {
13              alert("true  t=undefined;");
14            }
15            else
16            {
17              alert("false  t=undefined;");
18            }

由於在js中未定義的變量默認值是undefined,因此這也就就解釋了第一類情況

 

 

 

6第六類已定義的函數,根據調用方式又分為兩種

第一種:不帶括號的,如果定義了就是真,沒有定義會報錯

1 function testfunction(){}
2            if(testfunction)
3            {
4              alert("true  testfunction;");
5            }
6            else
7            {
8              alert("false  testfunction;");
9            }

第二種:帶括號的,其實相當於調用函數,自然是根據函數的返回值判斷真假

 

例如:

 

1 function testfunction(){}
2  if(testfunction())
3           {
4             alert("true  testfunction;");
5           }
6           else
7           {
8             alert("false  testfunction;");
9           }

 

是假,是因為,函數如果沒有定義返回值值,則返回值是undefined

 

 


7第七類已定義的對象,未賦值時在if中則為假,賦值后是真。

例如:

1 var obj;
2             if(obj)
3            {
4              alert("true  obj;");
5            }
6            else
7            {
8              alert("false  obj;");
9            }

其實由於在js中變量在沒有賦值時是沒有類型的,因此和第一種情況是一樣的。

 

但在賦值后,就會變成真,例如:

 

 1           var <span style="font-family: Arial, Helvetica, sans-serif;">obj</span>
 2 ;
 3             obj={};
 4             if(obj)
 5            {
 6              alert("true  obj={};");
 7            }
 8            else
 9            {
10              alert("false  obj={};");
11            }

8第八類已定義的對象的屬性字段,和單獨的變量是一樣的,例如數值型為0時是假,其他為真,字符串型是為空值時是假,其他為真。

 

例如

 

 

 
 1 var obj={};
 2           obj.Text="";
 3            if(obj.Text)
 4           {
 5             alert("true  obj.Text;");
 6           }
 7           else
 8           {
 9             alert("false  obj.Text");
10           }
11            obj.Text="Text";
12            if(obj.Text)
13           {
14             alert("true  obj.Text;");
15           }
16           else
17           {
18             alert("false  obj.Text");
19           }
20           obj.Text=0;
21            if(obj.Text)
22           {
23             alert("true  obj.Text;");
24           }
25           else
26           {
27             alert("false  obj.Text");
28           }
29            obj.Text=1;
30            if(obj.Text)
31           {
32             alert("true  obj.Text;");
33           }
34           else
35           {
36             alert("false  obj.Text");
37           }

 

9第九類已定義的對象的方法,和單獨的函數是一樣的,

 

不加括號是如果沒定義就是假,

 1 var obj={};
 2             obj.Funtext=function(){};
 3             if(obj.Funtext)
 4            {
 5              alert("true  obj.Funtext;");
 6            }
 7            else
 8            {
 9              alert("false  obj.Funtext");
10            }          
11             if(obj.Funtext1)//未定義屬性,也沒有定義方法
12            {
13              alert("true  obj.Funtext1;");
14            }
15            else
16            {
17              alert("false  obj.Funtext1");
18            }

加了括號相當於調用方法,就是根據返回值判斷真假。

 

 1 var obj={};
 2              obj.Funtext=function(){};
 3             if(obj.Funtext())
 4            {
 5              alert("true  obj.Funtext();");
 6            }
 7            else
 8            {
 9              alert("false  obj.Funtext()");
10            }
11             obj.Funtext2=function(){ return "ff"};
12             if(obj.Funtext2())
13            {
14              alert("true  obj.Funtext2();");
15            }
16            else
17            {
18              alert("false  obj.Funtext2()");
19            }

 

可以看到在js中可以在if中作為判斷的類型很多,但最終都可以看做這些類型的變形。只要掌握了這些最基本的,就可以靈活運用if判斷了。

最基本是null,undefined,if判斷都是假;對於數值類型,0是假,其他為真;對於字符類型空字符串是假,其他為真,對於方法屬性,如果定義了就是真,否則就是假,其他所有都可以看做是這些的變相應用。

 原文 https://www.cnblogs.com/Liangbingbing/p/6582253.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM