1. 程式人生 > >javascript之基本包裝類型

javascript之基本包裝類型

table 創建 作用域 除了 技術 原來 生命 world www.

基本包裝類型

基本包裝類型是特殊的引用類型。每當讀取一個基本類型值的時候,後臺就會創建一個對應的基本包裝類型的對象,從而可以調用屬性、方法來進行後續操作。

ECMAScript還提供了三種基本包裝類型:Number、String、Boolean。

代碼現狀

我們經常寫類似這樣的代碼,基本類型的變量可以當做對象一樣調用屬性、方法,但這又不是一個真正的對象只是一個變量而已,那麽這是為什麽呢?

1    var str = "hello world";
2     console.log(str.length);     // 11
3     console.log(str.toUpperCase());// HELLO WORLD

其實為了便於操作基本數據類型的值,JavaScript 中的基本數據類型的值會在後臺創建一個對應的基本包裝類型對象,除了 null 和 undefined 所有的基本類型都有對應的包裝類型。

如上代碼,後臺會自動完成下列的處理:

執行到第二行時:

  1. 創建 String 類型的一個實例;
  2. 在實例上調用指定的屬性;
  3. 銷毀這個實例;

執行到第三行時:

  1. 創建 String 類型的一個實例;
  2. 在實例上調用指定的方法;
  3. 銷毀這個實例;

可以將以上三個步驟想象成是執行了下列ECMAScript代碼:

技術分享
1 // 執行到第二行時
2 var str = new String("hello world");
3 str.length;
4 str = null;
5 
6 // 執行到第三行時
7 var str = new String("hello world");
8 str.toUpperCase();
9 str = null;
技術分享

這樣以上代碼中字符串就變得跟對象一樣了,同理分別適用與Boolean、Number類型對應的基本數據類型;

現在是不是明白原來這個這個基本包裝類型其實就是基本數據類型對應的類型

類型映射關系
string String
number Number
布爾類型(true、false) Boolean

註意:

並不是包裝類型提供了方法,而是javascript 引擎後臺創建了對應基本包裝類型的實例(對象)

每當讀取一個基本類型值的時候,後臺就會創建一個對應的基本包裝類型對象 如:

1 var str = new String("hello world");
2  str.length;
3  str = null;

引用類型對象與基本包裝類型對象的區別

主要區別就是這兩種對象的生命周期不同。

通過以上代碼塊我們知道基本包裝類型自動創建的對象在對象被調用的時刻存在,調用完後就被銷毀了,而使用new關鍵字創建的引用類型的實例,對象在當前作用域都存在。

//基本包裝類型對象
1 var s=‘some‘; 2 s.age=‘Joel‘; 3 console.log(s.age);//undefined

如上代碼在給字符串s添加age屬性,但是當代碼執行到第三行時name屬性已經被銷毀了,當代碼執行第三行時,又創建了一個String 實例,但是這個實例並沒有age屬性所以輸出undefined;

//顯示實例化包裝類型
1 var s=new String(‘some‘); 2 s.age=‘Joel‘; 3 console.log(s.age);//Joel

總結

1、每個基本數據類型都映射到同名的基本包裝類型(除了null、undefined)。
2、在讀取基本類型值時,就會創建對應的基本包裝類型對象,從而方便了數據操作。
3、操作基本包裝類的對象一經執行完畢,就會立即銷毀。

javascript之基本包裝類型