js中的boolean原始類型和Boolean引用類型

js 代碼

 
  1. var bFound = true;  
  2. var bFlag = false;  

如上面的兩行代碼,boolean類型是JavaScript中的一種原始類型,它只有兩種值:true和false。

使用Boolean(value)方法可以強制轉換任意值爲boolean類型

js 代碼
 
  1. alert(Boolean('')); //outpt false  
  2. alert(Boolean('hello')); //output true  
  3. alert(Boolean(100)); //output true  
  4. alert(Boolean(0)); //output false
  5. alert(Boolean(NaN)); //output false
  6. alert(Boolean(null)); //output false  
  7. alert(Boolean(undefined)); //output false  
  8. alert(Boolean(new Object())); //output true   

可以看出,當被轉換的值爲空字符串、數字0和NaN、null或者undefined時,轉換爲false,其它情況轉換爲true。所以當我們寫if判斷的時候需要注意這些特殊的情況,尤其是使用目前比較流行的“對象探測法”書寫JS時。

“對象探測法”主要寫法如下:

js 代碼
 
  1. var student = new Object();  
  2. if (student.name) {  
  3.   alert(student.name);  
  4. else {  
  5.   student.name = 'Tom';  
  6.   alert(student.name);  
  7. }  

if (student.name)這句用來探測student對象中存不存在name屬性,如果存在則彈出;否則把name賦值爲'Tom',再彈出。這邊需要注意的是如果name值已經存在,並且值爲空字符串或者0時,結果可能與你預期的不同。

在JavaScript中除了存在boolean類型這樣的原始類型之外,還存在一種引用類型 -- Boolean類型。創建Boolean類型的對象的代碼如下:

js 代碼
 
  1. var oBooleanObject = new Boolean(true);  

需要注意的是這邊的"new Boolean()"與前面的"Boolean()"的區別,前者是創建Boolean對象,後者爲強制類型轉換方法。不過,在大多數情況下Boolean類型是不常被用到的。並且在使用Boolean類型的時候還可能產生一些誤會,看看下面的代碼:

js 代碼
 
  1. var oBooleanFalse = new Boolean(false);  
  2. alert(oBooleanFalse && true); //output true  

這邊輸出是true,讓人覺得奇怪。當執行oBooleanFalse && true時,oBooleanFalse被強制類型轉換了,而這邊oBooleanFalse是一個Object,強制轉換後爲true。也就說這邊用來計算的是oBooleanFalse對象本身,而不是它的值false。
雖然我們需要了解Boolean這種類型,但爲了避免錯誤,最好還是使用boolean原始類型。

再看下面一個例子:

js 代碼
  1. var ob1 = new Boolean(false);  
  2. var ob2 = (ob1&&true);  
  3. var ob3 = (true&&ob1);  
  4. var ob4 = Boolean(ob1&&true);  
  5. var ob5 = Boolean(true&&ob1);  
  6. alert("ob2 = " + ob2 + ", ob3 = " + ob3 + ", ob4 = " + ob4 + ", ob5 = " + ob5); 
  7. //output ob2 = true, ob3 = false, ob4 = true, ob5 = true 

這邊最讓人困惑的就是ob2和ob3由於順序上的不同,最終的結果居然不同。產生這樣的結果主要和JavaScript中的邏輯運算符的工作方式相關。具體工作方式如下:
1. && 的工作方式:
從第一個開始,遇到值爲false的表達式(fasle、null、undefined、0、NaN、‘’)則返回此表達式,否則返回最後一個表達式(注意,這邊所說的表達式不一定爲boolean類型)
2. || 的工作方式:從第一個開始,遇到值爲true的表達式(與上面&&相反的其他情況)的返回此表達式,否則返回最後一個表達式
3. ! 的工作方式:對表達式的值取非(注意不是對表達式)。

回到上面的例子,我們可以知道,對於var ob2 = (
ob1&&true);,首先看ob1表達式強制轉換爲boolean類型後的值,這邊ob1爲Boolean引用類型,從前文可知強制轉換後值爲true。邏輯運算(ob1&&true)會繼續看下一個值true。這時,邏輯運算&&發現這已經是最後一個值,所以返回了最後的這個表達式true。最終我們的ob2 = true。
對於var ob3 = (true&&ob1);,首先第一個表達式是true,接着看第二個表達式ob1,由於這已經是最後一個表達式了,所以返回ob1。最終ob3 = ob1 = new Boolean(false);即ob3是一個Boolean引用類型。
最後,在alert語句中,使用"ob3 = " + ob3時,默認會調用ob3的toString()方法,而Boolean類型的toString方法即是輸出它自己的內部值。這邊ob3的內部值爲false。瞭解到這樣的特性後,對於ob4和ob5的結果也就不難理解了。

JavaScript 中 if() 圓括號中的表達式將被看做布爾值來處理.

總之:

1.特殊值undefined和null變成false.

2.數字0和NaN變成false.

3.空字符串變成false.

4.所有其他值都變成true.


轉載:http://blog.csdn.net/gudanyehai/article/details/6089255

發佈了28 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章