作者来源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. C++设计模式-Prototype原型模式

    作用: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. Prototype模式提供了一个通过已存在对象进行新对象创建的接口(Clone), Clone()实现和具体的语言相关,在C+ ...

  2. php redis 安装篇(windows 7)

    人人都说redis比memcached好,但是没有实际体验过,概念还是比较模糊,今天就先把redis安装好,后面的体验再分享,由于php已经有了很好的扩展库支持,所以redis安装非常方便,下面是wi ...

  3. 慕课网-Java入门第一季-6-7 使用 Arrays 类操作 Java 中的数组

    来源:http://www.imooc.com/code/1556 Arrays 类是 Java 中提供的一个工具类,在 java.util 包中.该类中包含了一些方法用来直接操作数组,比如可直接实现 ...

  4. 批量Clip

    没有建立对应dataset,直接生成featureclass,主要是工作中没几个dataset. # -*- coding: utf-8 -*-__author__ = 'tanshuai' impo ...

  5. 安卓仿照QQ工单数实现

    1.使用BadgeView 控件,可以在网上下载源码或者Jar包 2.使用方法 holder.badgeView = new BadgeView(holder.item_layout.getConte ...

  6. Memcache的使用和协议分析详解

    Memcache的使用和协议分析详解 作者:heiyeluren博客:http://blog.csdn.NET/heiyeshuwu时间:2006-11-12关键字:PHP Memcache Linu ...

  7. List集合的remove一个对象的方法

    import java.util.ArrayList;import java.util.List;class A{ public boolean equals(Object obj){ return ...

  8. delphi 类方法、类变量、类常量、类属性的研究,自己的研究

    群里我师傅给我的答案: unit Unit4; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Vari ...

  9. 并发编程中.net与java的一些对比

    Java在并发编程中进行使用java.util.concurrent.atomic来处理一些轻量级变量 如AtomicInteger AtomicBoolean等 .Net中则使用Interlocke ...

  10. hadoop环境搭建

    osubtu16.04(单机模式),存储空间25G,内存2G密码那啥(!!) 1:任务清单 参考书籍,(hadoop3权威指南) (环境(系统macos12,java18101 ,hadoop173, ...