JS中Map和Object的區(qū)別

(JS文檔自譯)

Object和Map非常相似,兩者都可以完成鍵-值對(duì)的設(shè)置、獲取value、刪除key并且根據(jù)key獲取對(duì)應(yīng)的value。因此,在過(guò)去Object經(jīng)常被當(dāng)作Map來(lái)使用。但是,Object和Map的不同之處會(huì)讓Map在特定條件下成為一個(gè)更佳的選擇。

Map Object
附加的Key Map沒(méi)有默認(rèn)的key值 Object具有原型對(duì)象,所以它包含默認(rèn)的key值,并且使用不當(dāng)時(shí)會(huì)和自定義的key值產(chǎn)生沖突(在ES5中可以通過(guò)Object.create(null)來(lái)設(shè)置去掉默認(rèn)的key值,但這種解決方法并不常用)
Key的種類(lèi) Map的key值可以是任何類(lèi)型的值,包括函數(shù)、Object和任意基礎(chǔ)數(shù)據(jù)類(lèi)型 Object的key值只能是String或Symbol
Key的順序 Map中的key值排序簡(jiǎn)單直接,一個(gè)Map對(duì)象迭代鍵值對(duì)、Key、Value的順序和插入時(shí)的順序相同 一般對(duì)象的鍵值是有順序的,但這并不絕對(duì),有時(shí)對(duì)象的鍵值排序會(huì)變得很復(fù)雜,所以最好不要依賴(lài)于插入的順序。
大小 Map的大小可以輕松通過(guò)size屬性來(lái)獲得 Object的大小必須通過(guò)自行獲取
迭代 Map是可迭代對(duì)象,可以輕松完成迭代 Object沒(méi)有實(shí)現(xiàn)迭代協(xié)議,所以無(wú)法被for...of直接迭代(但可以自行實(shí)現(xiàn)迭代協(xié)議,或者使用Object.keys()Object.entries()來(lái)迭代對(duì)象的鍵值和實(shí)體,for...in也可以迭代Object的可枚舉屬性)
性能 頻繁增減鍵值對(duì)時(shí)表現(xiàn)會(huì)更好 頻繁增減鍵值對(duì)時(shí)表現(xiàn)較差
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容