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。

上面對包裝物件進行了簡單的分析,如果文章有任何問題或者對文章有任何的建議可以在底部留言。

相關文章