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 >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