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

Posted on 2016-09-28 11:14  影飞影  阅读(209)  评论(0)    收藏  举报

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

 

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

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

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

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

 

 var iTest=2;

 if(iTest)
 {    alert(true); }

 if(iTest==true)
 {    alert(true); }
 
 

你觉得答案是多少呢?

   答案是: true true

 

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

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

  一、单纯的布尔值运行,的确是  非0为true  ,如:
    var i1=1;

    var i2=-1;

    var i3=0;    

    var i4=2;

    alert(Boolean(i1)); //true

    alert(Boolean(i2)); //true

    alert(Boolean(i3)); //false

     alert(Boolean(i4)); //true

    if(i1){}  //true

    if(i2){} //true

    if(i3){} //false 

    if(i4){} //true

 

   ***二、==运算符并不是简单的将非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

         如:

 var i1=-2;
  var i2=1;
  var i3=0;

 var i4=2;

  if(i1==true) {} //将把true->1,      -2  != 1  此处没有对i1进行非0为true 的判断i1还是-2  结果为 false
  if(i2==true) {} //将把true->1,因此    1==1  true
  if(i3==true) {} //这个很明显了。      0  != 1  false
  if(i4==true){]  //将把true->1,  因此 2  != 1 此处没有对i4进行非0为true 的判断  i4还是2    结果为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 = "";

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来判断.