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

说到布尔型,估计不少人都知道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; alert(Boolean(i1)); //true alert(Boolean(i2)); //true alert(Boolean(i3)); //false if(i1){} //true if(i2){} //true 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

如:var i1=-2; var i4=2; var i2=1; var i3=0; if(i1==true) {} //将把true->1,因此 1!=-2 false if(i2==true) {} //将把true->1,因此1==1 true if(i3==true) {} //这个很明显了。 false if(i4==true){] //将把true->1,因此2!=1 false ////但是,下面就不同了: if(i1){} //相当于Boolean(-2) ,非0,因此为true true if(i2){} //非0,因此为ture if(i3){} //0,因此为false if(i4){} //非0,因此为true2、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,如:[code]var a = “1”;
var b = “001”;
var c = “”;

if(a==1){} //a=>number(a) true
if(b==1){} //b=>number(b) true
if(c==1){} //b=>0 false[/code]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来判断.