今天在藍色中看到一篇文章,對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、非Null 字元串會被轉換成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
------