js面向对象编程:if中可以使用那些作为判断条件呢?

作者来源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是假,其他为真;对于字符类型空字符串是假,其他为真,对于方法属性,如果定义了就是真,否则就是假,其他所有都可以看做是这些的变相应用。

时间: 2024-11-03 21:39:47

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

switch 中可以使用字符串当判断条件

switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的.显然,long和String类型都不符合switch的语法规定(版本原因),并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中. Java7

js面向对象编程:如何检测对象类型

在js中检测对象类型主要有三种,typeof,instanceof,constructor,这几种都可以检测对象的类型,但又有一定的区别.   1使用typeof检测对象类型. typeo作为最常用的检测类型的方法,返回字符串类型,具体使用如下: function testType(value) { var str=typeof(value); // alert(str); switch(str) { case 'undefined': // undefined类型 case 'object'

js面向对象编程:数据的缓存

js也可以通过缓存数据,来加快处理速度.在必要的时候使用空间还换取时间还是值得的.例如需要很长时间才能完成的计算,就可以把计算结果缓存到客户端,以后就可以直接使用缓存的计算结果,不在重复计算. 1简单函数的计算结果的缓存 2递归函数的计算结果的缓存  3Ajax读取数据的缓存 1简单函数的计算结果的缓存 例如: //共用函数,封装内部调用,缓存计算结果 function memorize(f) { var cache={}; return function(){ var key=argument

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

简单粗暴地理解js原型链--js面向对象编程 原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢在网上找点原型链和闭包的文章看,效果极好. 不要纠结于那一堆术语了,那除了让你脑筋拧成麻花,真的不能帮你什么.简单粗暴点看原型链吧,想点与代码无关的事,比如人.妖以及人妖. 1)人是人他妈生的,妖是妖他妈生的.人和妖都是对象实例,而人他妈和妖他妈就是原型.原型也是对象,叫原型对象. 2)人他妈和人他爸啪啪啪能生出一堆人宝宝.妖他妈和妖他爸啪啪啪能生出一堆妖宝宝,啪啪啪就是构造函数,俗

js面向对象编程:如何实现方法重载

js中如何实现方法重载?这涉及到三个问题 1同名函数的调用问题 2函数中特殊的参数arguments 3如何利用arguments实现方法重载 1同名函数的调用问题 都知道在js中如果存在多个名称相同的函数,则调用实际每次都只使用最后一个,js其实是没有重载的,也就是说,如果定义了多个同名的函数,单参数不一样,在调用时,js不管参数个数,只管前后顺序 例如: function test1(arg1) { alert("参数1:"+arg1); } function test1(arg1

js面向对象编程:如何定义常量?

js中有一个关键字const,但目前的浏览器似乎还不支持,如果一定要定义一些常量,其实可以使用闭包,匿名函数实现常量的定义. 例如: var Class = (function() { var UPPER_BOUND = 100;//定义了常量 var Test={}; // 定义了一个静态方法 获取常量的方法 Test.getUPPER_BOUND=function() { return UPPER_BOUND; } return Test; })(); 用法: var k=Class.get

js面向对象编程:两个小括号的使用

在查看很多jQuery的过程中,经常遇到两个小括号的情况. 例如: (function() { alert("测试1"); })(); (function() { alert("测试3"); }()); 其实这段代码,就是定义了一个匿名函数,并且进行了调用, 相当于如下几行代码: (function ListCommon2() { alert("测试1"); })(); (function ListCommon3() { alert("

js面向对象编程:this到底代表什么?

在js中this的用法很让人迷惑,有些像Java或者C#中的this,但又不完全一样.按照流行的说法this总是指向调用方法的对象. 1.纯粹函数调用. function ListCommon2(x) { this.x=x; alert("this 是 ListCommon2"+(this instanceof ListCommon2)); alert("this.constructor"+this.constructor); } function test(){

js面向对象编程(二) 构造函数继承

构造函数绑定 //基类建筑物var building = function () {    this.spec = "building";}; //address:房子地址,toward:房子朝向var house = function (address, toward) {    this.address = address;    this.toward = toward;}; //使房子继承建筑物 //使用call或者apply方法,将父对象的构造函数绑定在子对象上,在子对象构造