聊一聊對js包裝對象的理解
在 JavaScript 中,基本類型(primitive types)例如數(shù)字、字符串、布爾值、null 和 undefined,本身并不是對象。然而,為了方便開發(fā)者訪問屬性和方法,JavaScript 提供了一種機(jī)制,當(dāng)我們試圖訪問基本類型的屬性或方法時,它會自動創(chuàng)建一個對應(yīng)的包裝對象(wrapper object)。 這個包裝對象是臨時的,一旦屬性或方法訪問完畢,它就會被銷毀。
以下是關(guān)于 JS 包裝對象的幾個關(guān)鍵理解:
自動裝箱和拆箱: JavaScript 引擎在后臺自動執(zhí)行裝箱和拆箱操作。
裝箱 (Boxing): 當(dāng)訪問基本類型的屬性或方法時,JavaScript 會創(chuàng)建一個對應(yīng)的包裝對象(
Number
、String
、Boolean
)。例如,'hello'.toUpperCase()
會先將字符串 'hello' 裝箱成String
對象,然后調(diào)用toUpperCase()
方法,最后返回結(jié)果。拆箱 (Unboxing): 裝箱創(chuàng)建的包裝對象是臨時的。一旦操作完成,對象會被銷毀,值會被還原成基本類型。
三種包裝類型: JavaScript 提供了三種內(nèi)置的包裝類型:
String
:用于字符串基本類型。Number
:用于數(shù)字基本類型。Boolean
:用于布爾值基本類型。Symbol
和BigInt
也有對應(yīng)的包裝對象,但使用場景相對較少。
臨時性: 包裝對象只在訪問屬性或方法的瞬間存在,之后立即被銷毀。這意味著你不能持久地持有對包裝對象的引用。例如,以下代碼不會修改原始字符串:
let str = 'hello'; let strObject = new String(str); // 手動創(chuàng)建 String 對象 strObject.foo = 'bar'; // 修改包裝對象 console.log(str.foo); // undefined,原始字符串不受影響
手動創(chuàng)建包裝對象: 雖然不推薦,但你可以手動使用
new String()
、new Number()
和new Boolean()
創(chuàng)建包裝對象。 手動創(chuàng)建的對象不會像自動裝箱那樣短暫存在,它們會持續(xù)占用內(nèi)存,除非被垃圾回收。 一般情況下,應(yīng)該避免手動創(chuàng)建包裝對象,讓 JavaScript 引擎自動處理裝箱和拆箱即可。null 和 undefined 沒有包裝對象: 嘗試訪問
null
或undefined
的屬性或方法會拋出TypeError
。
示例:
let num = 10; console.log(num.toFixed(2)); // "10.00",自動裝箱成 Number 對象,調(diào)用 toFixed() 方法 let str = 'hello'; console.log(str.length); // 5,自動裝箱成 String 對象,訪問 length 屬性 let bool = true; console.log(bool.toString()); // "true",自動裝箱成 Boolean 對象,調(diào)用 toString() 方法
總結(jié):
理解 JavaScript 包裝對象的概念對于編寫高效和正確的代碼至關(guān)重要。記住,它們是臨時的,用于提供對基本類型屬性和方法的訪問,并且通常情況下,你應(yīng)該讓 JavaScript 引擎自動處理裝箱和拆箱。 避免手動創(chuàng)建包裝對象,除非你有非常特定的需求。
相關(guān)文章
深入淺析JS Function()構(gòu)造函數(shù)
這篇文章給大家介紹了js function()構(gòu)造函數(shù)的知識以及關(guān)于function()構(gòu)造函數(shù)需要注意的幾個要點(diǎn),本文介紹的非常不錯,具有參考借鑒價值,感興趣的朋友一起看下吧2016-08-08JavaScript在多瀏覽器下for循環(huán)的使用方法
JavaScript語言在不同的瀏覽器的下有存在細(xì)微的差異,但不像DOM操作差異那么大,現(xiàn)在為大家列舉出其中一個"for循環(huán)"的差異,并介紹如何有效的解決這種差異2012-11-11Spring Boot根據(jù)配置暴露接口的代碼實(shí)現(xiàn)
SpringBoot 在 org.springframework.boot.autoconfigure.condition 包下提供了很多 ConditionalOnXxx 格式的條件注解,這些類名起的非常好,很直觀的可以理解其功能,本示例要實(shí)現(xiàn)的效果:在非生產(chǎn)環(huán)境下暴露測試用的接口,需要的朋友可以參考下2024-11-11用最簡單的方法判斷JavaScript中this的指向(推薦)
都說 JavaScript 是一種很靈活的語言,這其實(shí)也可以說它是一個混亂的語言,下面通過本文給大家分享JavaScript中this的指向知識,感興趣的朋友一起看看吧2017-09-09JavaScript SHA1加密算法實(shí)現(xiàn)詳細(xì)代碼
這篇文章主要為大家詳細(xì)介紹了JavaScript SHA1加密算法實(shí)現(xiàn)代碼,具有一定的參考價值,感興趣的朋友可以參考一下2016-10-10基于JavaScript實(shí)現(xiàn)無限加載瀑布流
這篇文章主要為大家詳細(xì)介紹了基于JavaScript實(shí)現(xiàn)無限加載瀑布流,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07JAVASCRIPT IE 與 FF中兼容問題小結(jié)
在不同瀏覽器中對于一些屬性的支持也不一樣,下面是對ie和firefox的一些小結(jié)。2009-02-02