Javascrip中的布尔类型是很有趣的,最起码从C#这种强类型语言的角度来说;

首先,用来判断是true还是false,不仅是要用true或false,好像任何对象都可以用来做为布尔判断,是不是有种“天地万物都为我所用”的成就感,上网查查了,从别处抄来总结如下:

1、所有对象都被认为是 true。

2、字符串当且仅当为空(""或'')时才被认为是 false。

3、null 和未定义的均被认为是 false。

4、数字当且仅当为 0 时才是 false 。

所以用起来很是方便应手了,想判断页面中是否有某个对象,真接就来句:

if(button)

{

  alert("存在");

}

else

{

  alert("SORRY,不存在");

}

JavaScript布尔型数据与==运算符。

今天在蓝色中看到一篇文章,对js 中布尔型及==运算符进行了一番比较分析。

不看不知道,一看吓一跳,平时还真的没有注意到这么细节的东西:

所谓大牛与菜鸟,估计这是重要的区别之一了。

说到布尔型,估计不少人都知道JS中非0即为true,那么请您运行一下下面这两行代码:

复制代码
1 var iTest=2; 2 if(iTest) 3 { 4    alert(true); 5 } 6 if(iTest==true) 7 { 8    alert(true); 9 }
复制代码

 

你觉得答案是多少呢?

   答案是: true true

   ----对不起,其实答案是 true false,但我相信,上面才是不少人以目中的第一答案。

  为了让大家,也为了让我能记住,或者是知道有这么一些我们容易忽略的东西,我将记录一下这些区别或细节:

  一、单纯的布尔值运行,的确是非0为true,如:  

复制代码
 1   var i1=1;  2   var i2=-1;  3   var i3=0;  4   alert(Boolean(i1)); //true  5   alert(Boolean(i2)); //true  6   alert(Boolean(i3)); //false  7   if(i1){}  //true  8   if(i2){} //true  9   if(i3){} //false 
复制代码

 

   二、==运算符并不是简单的将非0的转为true,反之为false,反而是:

     1、If Type(x) is Boolean, return the result of the comparison ToNumber(x) == y.           If Type(y) is Boolean, return the result of the comparison x == ToNumber(y).

         也就是说:如果某一个操作数为bool型,那么它会被转换成数字进行比较,而规则是:true->1 false->0

         如:

       

复制代码
 1 var i1=-2;  2 var i4=2;  3 var i2=1;  4 var i3=0;  5 if(i1==true) {} //将把true->1,因此 1!=-2 false  6 if(i2==true) {} //将把true->1,因此1==1  true  7 if(i3==true) {} //这个很明显了。 false  8 if(i4==true){]  //将把true->1,因此2!=1  false  9 ////但是,下面就不同了: 10 if(i1){} //相当于Boolean(-2) ,非0,因此为true   true 11 if(i2){} //非0,因此为ture 12 if(i3){} //0,因此为false 13 if(i4){} //非0,因此为true
复制代码

 

    2、If Type(x) is Number and Type(y) is String, return the result of the comparison x == ToNumber(y).         If Type(x) is String and Type(y) is Number, return the result of the comparison ToNumber(x) == y.

        也就是说某一操作数为字符串,另一个是number时,字符串为转换为number,如:     

复制代码
1 var a = "1"; 2 var b = "001"; 3 var c = ""; 4  5 if(a==1){} //a=>number(a) true 6 if(b==1){} //b=>number(b) true 7 if(c==1){} //b=>0 false
复制代码

 

    3、非空字符串会被转换成true(而null和undefined为false),如:   

1 var a="a"; 2 var b=""; 3 if(a){} //true 4 if(b){} //false

 

 

------

 说到这里,想起jQuery的$,这个东东选取元素时,结果返回jQuery对象,无论元素是否存在。

 因此不能用if($('#id'))来判断是否选取到。而可以用$('#id').length>0来判断.

  原文章地址:http://www.blueidea.com/tech/web/2010/7576.asp

------

posted on 2013-10-20 10:58  javascript程序员  阅读(276)  评论(0编辑  收藏  举报