亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

全部開發者教程

JavaScript 入門教程

對象包裝器

對象包裝器也被稱為 包裝器、包裝對象.

所有包裝器都是內置對象,如 NumberString、Boolean 等。

1. 裝箱

通常在對一個變量賦值的時候,都會直接給定一個字面量。

var string = '996 say no!';

console.log(typeof string); // 輸出:"string"

通過類型的檢測,可以知道他是一個字符串。

但又可以訪問到一些屬性,比如 length

var string = '996 say no!';

console.log(typeof string); // 輸出:"string"
console.log(string.length); // 輸出:11

照道理講只有對象才能訪問到屬性,字符串字面量只是一個值而已。

這里就是因為 JavaScript 內部的拆裝箱的機制。

當把一個字面量像對象一樣操作的時候,JavaScript 會進行裝箱操作。

可以把上面這份代碼理解成下面這份:

var string = '996 say no!';

console.log(typeof string); // 輸出:"string"
console.log((new String(string)).length); // 輸出:11

其中的 new String 就是裝箱操作,String 就是字符串的對象包裝器。

這樣將字符串轉換成了對象,就能訪問到其屬性了。

需要注意的是,對一個字面量包裝后不會修改原始值,上述例子中的 string 變量的值依然是字符串字面量,不會變成對象,所以每一次對一個字面量做訪問屬性或方法的操作時,都會做一次裝箱操作。
許多開發者會考慮頻繁裝箱的性能影響,其實通常是不必要的,一是現在計算機和瀏覽器的處理執行速度很快了,幾乎可以忽略不計裝箱的開銷,另外就是業務開發中在沒有明確的性能要求下,是不考慮性能的,以完成業務邏輯為主。

2. 拆箱

拆箱操作很多時候是隱式轉換過程中發生的。

如將字符串進行對象相等操作:

var obj = {
  toString: function() {
    return '996';
  },
};

console.log(
  '996' == obj,
); // 輸出:true

上述例子,在字符串字面量 996 和對象 obj 進行比較的時候,會嘗試將右側的對象轉化成字符串,即調用 toString 方法(在 ES6 中則會先看有沒有部署 Symbol.toPrimitive 方法)。

這個即使拆箱的過程。

3. 小結

理解對象包裝器的作用,可以更好的理解內置對象的用途。