?????前沿
一直以來(lái)使用數(shù)組和對(duì)象來(lái)定義數(shù)據(jù)模型,前幾天在翻閱ES6語(yǔ)法的時(shí)候相艇,突然發(fā)現(xiàn)有一種Map對(duì)象對(duì)操作鍵值對(duì)特別好用欲鹏,而且代碼更簡(jiǎn)潔明了赔嚎,簡(jiǎn)直太棒了。今天胧弛,我們就來(lái)一步步了解什么是Map對(duì)象尤误,詳細(xì)給大家介紹一下Map對(duì)象的屬性和方法。希望大家以后再數(shù)據(jù)操縱方法多一種解決問(wèn)題的方法结缚,這是ECMAScript 6 新增的數(shù)據(jù)結(jié)構(gòu)损晤。
? ?? 定義
? ?Map對(duì)象保存鍵/值對(duì),是鍵/值對(duì)的集合红竭。任何值(對(duì)象或者原始值) 都可以作為一個(gè)鍵或一個(gè)值尤勋。Object結(jié)構(gòu)提供了“字符串—值”的對(duì)應(yīng),Map結(jié)構(gòu)提供了“值—值”的對(duì)應(yīng)茵宪。
? ? ?語(yǔ)法
iterable?可以是一個(gè)數(shù)組或者其他iterable?對(duì)象最冰,其元素或?yàn)殒I值對(duì),或?yàn)閮蓚€(gè)元素的數(shù)組稀火。?每個(gè)鍵值對(duì)都會(huì)添加到新的?Map暖哨。null?會(huì)被當(dāng)做?undefined。
? ? ?描述
????? ? 集合中的鍵和值可以是任何類型凰狞。如果使用現(xiàn)有鍵向集合添加值篇裁,則新值會(huì)替換舊值。
?Object?和?Map?對(duì)象的對(duì)比:
相似點(diǎn):?都允許你按鍵存取一個(gè)值赡若、刪除鍵茴恰、檢測(cè)一個(gè)鍵是否綁定了值。
?不同點(diǎn):
????????????????????? ?1.?一個(gè)對(duì)象的鍵只能是字符串或者?Symbols斩熊,但一個(gè)?Map?的鍵可以是任意值往枣,包括函數(shù)、對(duì)象粉渠、基本類型分冈。
2.Map?中的鍵值是有序的,而添加到對(duì)象中的鍵則不是霸株。因此雕沉,當(dāng)對(duì)它進(jìn)行遍歷時(shí),Map對(duì)象是按插入的順序返回鍵值去件。
3.?通過(guò)?size?屬性直接獲取一個(gè)?Map?的鍵值對(duì)個(gè)數(shù)坡椒,而?Object?的鍵值對(duì)個(gè)數(shù)只能手動(dòng)計(jì)算扰路。
4.?Map?是可迭代的,而?Object?的迭代需要先獲取它的鍵數(shù)組然后再進(jìn)行迭代倔叼。
5.?Object?都有自己的原型汗唱,所以原型鏈上的鍵名有可能和對(duì)象上的鍵名產(chǎn)生沖突。雖然 ES5 開(kāi)始可以用 map =?Object.create(null) 來(lái)創(chuàng)建一個(gè)沒(méi)有原型的對(duì)象丈攒,但是這種用法不太常見(jiàn)哩罪。
6.?Map?在頻繁增刪鍵值對(duì)的場(chǎng)景下會(huì)有些性能優(yōu)勢(shì)。
? ? 屬性
????????????? ? 下表列出了Map對(duì)象的屬性
屬性描述
? ? Map實(shí)例
所有的Map實(shí)例都會(huì)繼承自Map.prototype巡验。
? ? ? ? 屬性
????????????? ? ?????下表列出了Map對(duì)象實(shí)例的屬性
????? ? 方法
下表列出了Map對(duì)象實(shí)例的方法
????????示例
Map對(duì)象類似于對(duì)象际插,也是鍵值對(duì)的集合,但是“鍵”的范圍不限于字符串显设,各種類型的值(包括對(duì)象)都可以當(dāng)作鍵框弛。
作為構(gòu)造函數(shù),Map也可以接受一個(gè)數(shù)組作為參數(shù)捕捂。該數(shù)組的成員是一個(gè)個(gè)表示鍵值對(duì)的數(shù)組功咒。
????? ?????????如果對(duì)同一個(gè)鍵多次賦值,后面的值將覆蓋前面的值绞蹦。
如果讀取一個(gè)未知的鍵力奋,則返回undefined。S钠摺>耙蟆!注意澡屡,只有對(duì)同一個(gè)對(duì)象的引用猿挚,Map結(jié)構(gòu)才將其視為同一個(gè)鍵。Map 的鍵實(shí)際上是跟內(nèi)存地址綁定的驶鹉,只要內(nèi)存地址不一樣绩蜻,就視為兩個(gè)鍵。這就解決了同名屬性碰撞(clash)的問(wèn)題室埋,我們擴(kuò)展別人的庫(kù)的時(shí)候办绝,如果使用對(duì)象作為鍵名,就不用擔(dān)心自己的屬性與原作者的屬性同名姚淆。
Map.clear() 方法清除所有成員孕蝉,沒(méi)有返回值。
Map對(duì)象遍歷方法示例
結(jié)合數(shù)組的map() 和filter()方法腌逢,可以實(shí)現(xiàn)對(duì)Map的遍歷和過(guò)濾(Map本身沒(méi)有map()和filter()方法)
Map對(duì)象還有一個(gè)forEach方法降淮,與數(shù)組的forEach方法類似,也可以實(shí)現(xiàn)遍歷搏讶。
forEach方法還可以接受第二個(gè)參數(shù)佳鳖,用來(lái)綁定this霍殴。