JavaScript 包裝物件

admin發表於2019-04-13

無論生活中還是工作中,都有很多習以為常的現象或者認為理所應當的事情。

但如果真去探究其中的來龍去脈或原理,可能未必能那麼清晰,甚至讓人感覺匪夷所思。

如蘋果落地現象,普通人肯定感覺這是理所當然的事情,如果不是牛頓多思,豈能發現萬有引力。

由此可見,學習中要重視每一個細節,因為裡面可能隱藏著自己尚未掌握的知識。

JavaScript中 也有類似的現象,首先看一段簡單程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var str = "antzone";
console.log(str.length);

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201904/13/221603eaf5dzx5f9jpha2x.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上面程式碼非常簡單,通過 length 屬性獲取字串包含的字元的個數。

但是如果深究下去可能會產生一些疑問,分步闡述如下:

(1).JavaScript 資料分為值型別與引用型別,引用型別也就是通常所說的物件。

(2).只有物件才有可能擁有方法或者屬性,然後通過點(.)或者其他方式使用這些屬性或者方法。

(3).但上面 str 很明是一個值型別資料,為什麼也能夠使用 length 屬性。

關於資料型別相關知識可以參閱如下兩篇文章:

(1).JavaScript 值型別和引用型別一章節。

(2).JavaScript 資料型別一章節。

上述現象分析如下:

(1)."antzone" 確實是值型別資料,但是當通過點(.)使用 length 屬性的時候。

(2).內部會自動將值型別資料臨時轉換為對應的字串物件,於是就可以使用此屬性了。

(3).這是一個臨時包裝物件。

(4).此臨時包裝物件會在呼叫完屬性後被立即銷燬。

再來看一段程式碼簡單的程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
var str = "antzone";
str.len = 5;
console.log(str.len)

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201904/13/221740itjr11to115sjj8r.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上述程式碼列印結果為 undefined,程式碼分析如下:

(1).當為自定義屬性 len 賦值的時候,會生成一個包裝物件。

(2).此包裝物件會在賦值結束後立馬被銷燬,自然 len 屬性值也被一併銷燬。

(3).當列印 str.len 時,又會臨時生成一個包裝物件,此時 len 值是 undefined。

JavaScript 具有的包裝物件:

具有三個包裝物件,分別是 String,Number 和 Boolean。

分別對應著 字串、數值和布林,都是一樣的原理,不再多介紹。

相關文章