作者来源http://www.2cto.com/kf/201407/314978.html搬运

在所有编程语言中if是最长用的判断之一,但在js中到底哪些东西可以在if中式作为判断表达式呢?

例如如何几行,只是少了一个括号,真假就完全不同,到底表示什么含义呢

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var 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()");
   }

1第一类已定义的变量但未赋值在if中认为是假

例如:

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

2第二类已定义的变量,赋值为空字符串在if中认为是假,赋值为其他的字符串,也就是是字符串中有字符就认为是真

例如:

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

if判断是假

再例如:

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

if判断是真,也就是对于字符串类型,只要有字符,即使是空格字符if判断也为真。

3第三类已定义的变量,赋值为true在if中认为是真,赋值为false,则为假,这和其他语言中bool的类型的变量是一样的。

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var  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;");
 }

4第四类已定义的变量,赋值为0在if中则为假,其他数值认为是真,这和c语言中数值的类型的变量是一样的。

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var  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,还是0.0都是假

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

发现非0是都是真

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var  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;");
           }

由于在js中未定义的变量默认值是undefined,因此这也就就解释了第一类情况

6第六类已定义的函数,根据调用方式又分为两种

第一种:不带括号的,如果定义了就是真,没有定义会报错

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

第二种:带括号的,其实相当于调用函数,自然是根据函数的返回值判断真假

例如:

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

是假,是因为,函数如果没有定义返回值值,则返回值是undefined

7第七类已定义的对象,未赋值时在if中则为假,赋值后是真。

例如:

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

其实由于在js中变量在没有赋值时是没有类型的,因此和第一种情况是一样的。

但在赋值后,就会变成真,例如:

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

8第八类已定义的对象的属性字段,和单独的变量是一样的,例如数值型为0时是假,其他为真,字符串型是为空值时是假,其他为真。

例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
var 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");
          }

9第九类已定义的对象的方法,和单独的函数是一样的,

不加括号是如果没定义就是假,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var 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");
           }

加了括号相当于调用方法,就是根据返回值判断真假。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var 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是假,其他为真;对于字符类型空字符串是假,其他为真,对于方法属性,如果定义了就是真,否则就是假,其他所有都可以看做是这些的变相应用。

js面向对象编程:if中可以使用那些作为判断条件呢?的更多相关文章

  1. if中可以使用那些作为判断条件呢?

    在所有编程语言中if是最长用的判断之一,但在js中到底哪些东西可以在if中式作为判断表达式呢? 例如如何几行,只是少了一个括号,真假就完全不同,到底表示什么含义呢 ? 1 2 3 4 5 6 7 8 ...

  2. js面向对象编程 ---- 系列教程

    原 js面向对象编程:数据的缓存 原 js面向对象编程:如何检测对象类型 原 js面向对象编程:if中可以使用那些作为判断条件呢? 原 js面向对象编程:this到底代表什么?第二篇 原 js面向对象 ...

  3. 带你一分钟理解闭包--js面向对象编程

    上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...

  4. Js面向对象编程

    Js面向对象编程 1.     什么是面向对象编程? 我也不说不清楚什么是面向对象,反正就那么回事吧. 编程有时候是一件很快乐的事,写一些小游戏,用编程的方式玩游戏等等 2.     Js如何定义一个 ...

  5. 页面循环绑定(变量污染问题),js面向对象编程(对象属性增删改查),js字符串操作,js数组操作

    页面循环绑定(变量污染问题) var lis = document.querySelectorAll(".ul li") for ( var i = 0 ; i < lis. ...

  6. 简单粗暴地理解js原型链–js面向对象编程

    简单粗暴地理解js原型链–js面向对象编程 作者:茄果 链接:http://www.cnblogs.com/qieguo/archive/2016/05/03/5451626.html 原型链理解起来 ...

  7. JS面向对象编程,对象,属性,方法。

    document.write('<script type="text/javascript" src="http://api.map.baidu.com/api?v ...

  8. js原生设计模式——3简单工厂模式\js面向对象编程实例

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  9. JS面向对象编程(进阶理解)

    JS 面向对象编程 如何创建JS对象 JSON语法声明对象(直接量声明对象) var obj = {}; 使用 Object 创建对象 var obj = new Object(); JS对象可以后期 ...

随机推荐

  1. Python-10 字典

    #1 创建 dict1={'欢欢':'i love','小高高':'you'} dict2={1:'one',2:'two',3:'three'} dict3={} #2 访问元素 print('欢欢 ...

  2. 在SQL2008配置数据库镜像1418错误的处理

    在SQL2008配置数据库镜像错误一般都由以下原因造成 1.主体.镜像服务器SQL SERVER选择本账号切保持一致 2.在数据库镜像配置向导中的“服务账号”选项中请选择需要同步数据库的登陆名,例如数 ...

  3. JAVA IO 学习

    Java流的分类 1.输入/输出流 输入流:只能向其读数据,不能写. 输出流:只能向其写数据,不能读. 所谓的输入输出都是相对应用程序而言的. 2.字节流/字符流 单位不同,字节流操作8位,字符流操作 ...

  4. oracle 查询执行过的SQL语句

    SELECT * FROM v$sqlarea t WHERE t.FIRST_LOAD_TIME between '2016-12-23/16:03:00' and '2016-12-23/16:0 ...

  5. Notepad++的xml文本格式化

    1.需要使用插件 2.使用插件

  6. ios中,在SearchBar里面搜索内容,可根据内容来查找所需的信息资源,可获得SearchBar中的内容

    贴一段我很久以前写的小demo,你们就明白了,是把textField套在alertView里的@interface ViewController : UIViewController <UIAl ...

  7. android 双击返回按钮退出程序。

    重写   onKeyDown()方法. @Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == K ...

  8. 完全卸载Oracle11G

    要特别注意删除注册表的这块,如果删错了会导致系统出现问题,而且oracle的安装卸载真的很烦,一旦装错了,卸载不干净就会导致种种的问题无法再次安装,个人建议用360卸载,360卸载完成后会自动检测到无 ...

  9. xml 配置文件规范 校验

    背景:做的数据同步框架,数据同步种类通过xml配置文件添加.为了系统的稳定性,我们只能认为将来写这个运行配置xml的人是一个傻瓜,那么对xml格式校验就很重要. 通过dom4j,是可以完成对xml格式 ...

  10. js部分总结

    1 currentStyle 可以获取行间样式,但是不兼容 其他浏览器用getComputedStyle(div,null)这个ie低级版本不兼容; if(div.currentStyle){ } e ...