1. 程式人生 > >JS引用型別中的基本包裝型別-——Boolean,Number,String

JS引用型別中的基本包裝型別-——Boolean,Number,String

為了便於操作基本型別的值,ECMAScript提供了三個特殊的引用型別:Boolean,Number,String

一,基本包裝型別與引用型別的主要區別

每當讀取一個基本型別的值時,後臺就會建立一個對應的基本包裝型別的物件,從而能夠讓我們呼叫一些方法來操作這些資料。
在讀取模式中訪問字串時後臺都會自動完成下列處理(Number和Boolean處理相同):

(1)建立String型別的一個實列
(2)在實列上呼叫指定的方法
(3)銷燬這個例項
可以將上面三個步驟想象成是執行了下列ECMAScript程式碼:

 var str1 = new String("some text");
   var str2 = str1.substring(2);
   str1 = null;

綜上就知基本包裝型別與引用型別的主要區別就是物件的生存期。使用new操作符建立的引用型別的例項在執行流離開當前作用域之前都一直儲存在記憶體中。而自動建立的基本包裝型別的物件則只存在於一行程式碼的執行瞬間,然後立即銷燬。也就意味著不能在執行時為基本型別值新增屬性和方法。

二,new Number()與Number()的區別

使用new操作符呼叫基本包裝型別的建構函式與直接呼叫同名的轉型函式是不一樣的,從下面就可得知(Boolean和String相同):

 var value = "10";
  var number = Number(value);//轉型函式
  alert(typeof(number));//“number”
    
    var obj = new Number(value);//建構函式
    alert(typeof(obj));//"object"
    /*其中變數number儲存的是基本包裝型別的值10,而變數obj儲存的是Number的例項*/
三,Boolean型別
    var falseObject = new Boolean(false);
    var result = falseObject && true;
    alert(result);//true

    var falseValue = false;
    result = falseValue && true;
    alert(result);//false

解析:上面程式碼中使用false建立了一個Boolean物件,然後這個物件與基本型別值true構成了邏輯與表示式。在布林運算中false&&true等於false,但是程式碼中的結果時true,這是因為Boolean建構函式這行程式碼是對falseObject而不是它的值(false)進行求值。需要注意的是布林表示式中的所有物件都會被轉化成true,因此falseObject物件在布林表示式中代表的是true,所以最後就是true&&true結果就是true。

基本型別與引用型別的布林值也是有很大區別的,從下面程式碼就可以看出:

    var falseObject = new Boolean(false);//此處falseObject作為Boolean的例項
    var result = falseObject && true;
    alert(result);//true

    var falseValue = false;//此處falseValue是一個基本型別值
    result = falseValue && true;
    alert(result);//false
    console.log(typeof falseObject);//object
    console.log(typeof falseValue);//boolean
    console.log(falseObject instanceof Boolean);//true
    console.log(falseValue instanceof Boolean);//false
    /*建議不要使用Boolean物件*/

String型別在另一篇部落格中詳細介紹