標籤:def str ase 關係 執行個體化 資料類型 分享 case table
基本封裝類型
基本封裝類型是特殊的參考型別。每當讀取一個基本類型值的時候,後台就會建立一個對應的基本封裝類型的對象,從而可以調用屬性、方法來進行後續操作。
ECMAScript還提供了三種基本封裝類型:Number、String、Boolean。
代碼現狀
我們經常寫類似這樣的代碼,基本類型的變數可以當做對象一樣調用屬性、方法,但這又不是一個真正的對象只是一個變數而已,那麼這是為什麼呢?
1 var str = "hello world";2 console.log(str.length); // 113 console.log(str.toUpperCase());// HELLO WORLD
其實為了便於操作基礎資料型別 (Elementary Data Type)的值,JavaScript 中的基礎資料型別 (Elementary Data Type)的值會在後台建立一個對應的基本封裝類型對象,除了 null 和 undefined 所有的基本類型都有對應的封裝類型。
如上代碼,後台會自動完成下列的處理:
執行到第二行時:
- 建立 String 類型的一個執行個體;
- 在執行個體上調用指定的屬性;
- 銷毀這個執行個體;
執行到第三行時:
- 建立 String 類型的一個執行個體;
- 在執行個體上調用指定的方法;
- 銷毀這個執行個體;
可以將以上三個步驟想象成是執行了下列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類型對應的基礎資料型別 (Elementary Data Type);
現在是不是明白原來這個這個基本封裝類型其實就是基礎資料型別 (Elementary Data Type)對應的類型
類型映射關係
| 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、每個基礎資料型別 (Elementary Data Type)都映射到同名的基本封裝類型(除了null、undefined)。
2、在讀取基本類型值時,就會建立對應的基本封裝類型對象,從而方便了資料操作。
3、操作基本封裝類的對象一經執行完畢,就會立即銷毀。
javascript之基本封裝類型