基本包裝類
js中為了便于基本類型操作,提供了3個特殊的引用類型:Boolean、Number顷歌、String
它們具有基本類型特殊行為。
實(shí)際上幔睬,每當(dāng)讀取一個基本類型的時候眯漩,js內(nèi)部會自動創(chuàng)建一個基本包裝類型對象,可以讓我們調(diào)用一些方法來操作。
let str = 'hello 蛙人'
let str1 = str.substring(2)
上面example中赦抖,str是一個字符串類型舱卡,然而它調(diào)用了substring
方法,并將結(jié)果保存在了str1中队萤,我們知道基本類型不是對象轮锥,我們就會想,哎 它不是對象為什么能調(diào)用方法要尔,其實(shí)js內(nèi)部已經(jīng)實(shí)現(xiàn)了一系列的處理舍杜,當(dāng)執(zhí)行第二行代碼時,訪問過程處于一種讀取狀態(tài)赵辕,也就是要從內(nèi)存中讀取這個字符串的值既绩。那js內(nèi)部是怎么處理的呢,看下面还惠。
- 創(chuàng)建String類型的實(shí)例
- 在實(shí)例上調(diào)用指定的方法
- 最后銷毀該實(shí)例
let str = new String('hello 蛙人')
let str1 = str.substring(2)
str1 = null
經(jīng)過上面的加工后熬词,基本字符串變的跟對象一樣,上面這三個步驟也適用于Boolean吸重、Number
類型。
那么有的小伙伴就會疑惑歪今,引用類型和基本包裝類有什么不同呢嚎幸,最主要的區(qū)別就是對象的生存期
。
- 引用類型:使用new操作符創(chuàng)建的引用類型實(shí)例寄猩,在執(zhí)行流離開當(dāng)前作用域之前一直都保存在內(nèi)存中嫉晶,
- 基本包裝類型:只存在一行代碼的執(zhí)行瞬間,然后立即銷毀
基本包裝類意味著我們不能在運(yùn)行時為對象添加屬性及方法田篇,因?yàn)樗鼈儓?zhí)行完后會立即銷毀
let str = '蛙人'
str.age = 23
console.log(str.age) // undefined
上面第二行代碼中替废,為“蛙人“添加 age 屬性,但是在下面打印發(fā)現(xiàn)是 undefined
泊柬,問題就在于椎镣,第二行代碼執(zhí)行完后立即銷毀,第三行代碼再次創(chuàng)建String對象發(fā)現(xiàn)沒有該age屬性兽赁。