第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開(kāi)發(fā)者教程

JavaScript 入門(mén)教程

對(duì)象包裝器

對(duì)象包裝器也被稱為 包裝器包裝對(duì)象.

所有包裝器都是內(nèi)置對(duì)象,如 Number、StringBoolean 等。

1. 裝箱

通常在對(duì)一個(gè)變量賦值的時(shí)候,都會(huì)直接給定一個(gè)字面量。

var string = '996 say no!';

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

通過(guò)類型的檢測(cè),可以知道他是一個(gè)字符串。

但又可以訪問(wèn)到一些屬性,比如 length

var string = '996 say no!';

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

照道理講只有對(duì)象才能訪問(wèn)到屬性,字符串字面量只是一個(gè)值而已。

這里就是因?yàn)?JavaScript 內(nèi)部的拆裝箱的機(jī)制。

當(dāng)把一個(gè)字面量像對(duì)象一樣操作的時(shí)候,JavaScript 會(huì)進(jìn)行裝箱操作。

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

var string = '996 say no!';

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

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

這樣將字符串轉(zhuǎn)換成了對(duì)象,就能訪問(wèn)到其屬性了。

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

2. 拆箱

拆箱操作很多時(shí)候是隱式轉(zhuǎn)換過(guò)程中發(fā)生的。

如將字符串進(jìn)行對(duì)象相等操作:

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

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

上述例子,在字符串字面量 996 和對(duì)象 obj 進(jìn)行比較的時(shí)候,會(huì)嘗試將右側(cè)的對(duì)象轉(zhuǎn)化成字符串,即調(diào)用 toString 方法(在 ES6 中則會(huì)先看有沒(méi)有部署 Symbol.toPrimitive 方法)。

這個(gè)即使拆箱的過(guò)程。

3. 小結(jié)

理解對(duì)象包裝器的作用,可以更好的理解內(nèi)置對(duì)象的用途。