JavaScript共有八種數(shù)據(jù)類型硕并,分別是 Undefined、Null秧荆、Boolean倔毙、Number、String辰如、Object普监、Symbol、BigInt琉兜。
其中 Symbol 和 BigInt 是ES6 中新增的數(shù)據(jù)類型:
- Symbol 代表創(chuàng)建后獨(dú)一無二且不可變的數(shù)據(jù)類型凯正,它主要是為了解決可能出現(xiàn)的全局變量沖突的問題。
- BigInt 是一種數(shù)字類型的數(shù)據(jù)豌蟋,它可以表示任意精度格式的整數(shù)廊散,使用 BigInt 可以安全地存儲(chǔ)和操作大整數(shù),即使這個(gè)數(shù)已經(jīng)超出了 Number 能夠表示的安全整數(shù)范圍梧疲。
這些數(shù)據(jù)可以分為原始數(shù)據(jù)類型和引用數(shù)據(jù)類型:
- 棧:原始數(shù)據(jù)類型(Undefined允睹、Null、Boolean幌氮、Number缭受、String)
- 堆:引用數(shù)據(jù)類型(對(duì)象、數(shù)組和函數(shù))
兩種類型的區(qū)別在于存儲(chǔ)位置的不同:
- 原始數(shù)據(jù)類型直接存儲(chǔ)在棧(stack)中的簡(jiǎn)單數(shù)據(jù)段该互,占據(jù)空間小米者、大小固定,屬于被頻繁使用數(shù)據(jù)宇智,所以放入棧中存儲(chǔ),棧區(qū)內(nèi)存由編譯器自動(dòng)分配釋放
- 引用數(shù)據(jù)類型存儲(chǔ)在堆(heap)中的對(duì)象蔓搞,占據(jù)空間大、大小不固定随橘。如果存儲(chǔ)在棧中喂分,將會(huì)影響程序運(yùn)行的性能;引用數(shù)據(jù)類型在棧中存儲(chǔ)了指針机蔗,該指針指向堆中該實(shí)體的起始地址蒲祈。當(dāng)解釋器尋找引用值時(shí)甘萧,會(huì)首先檢索其在棧中的地址,取得地址后從堆中獲得實(shí)體,堆區(qū)內(nèi)存一般由開發(fā)著分配釋放讳嘱,若開發(fā)者不釋放幔嗦,程序結(jié)束時(shí)可能由垃圾回收機(jī)制回收酿愧。
堆和棧的概念存在于數(shù)據(jù)結(jié)構(gòu)和操作系統(tǒng)內(nèi)存中沥潭,在數(shù)據(jù)結(jié)構(gòu)中:
- 在數(shù)據(jù)結(jié)構(gòu)中,棧中數(shù)據(jù)的存取方式為先進(jìn)后出嬉挡。
- 堆是一個(gè)優(yōu)先隊(duì)列钝鸽,是按優(yōu)先級(jí)來進(jìn)行排序的,優(yōu)先級(jí)可以按照大小來規(guī)定庞钢。