ES6 Map對象

什麼是Map 對象

Map對象是一種有對應 鍵/值 對的對象。


Maps 和 Objects 的區別


1、一個 Object 的key只能是字符串或者 Symbol對象,但是 Map 的key可以是任意值;

2、Map 中的key/value是有序的,我們可以根據序號進行獲取key/vlaue,而Object中則不是;

3、Map 的鍵值對個數可以通過 size 屬性來獲取,而 Object 的鍵值對個數只能手動計算;

4、Object 都有自己的原型,原型鏈上的鍵名有可能和你自己在對象上的設置的鍵名產生衝突。除非我們通過Object.create(null)的方式來創建一個沒有原型的對象。



01

Map 中的 key

字符串作為key


ES6 Map對象

運行結果:

ES6 Map對象

在上面的運行結果裡面我們會發現有個序號:0,1,2對應上面的區別2.下面有個size:4 對應了上面的區別3。


key 是對象

ES6 Map對象

運行結果

ES6 Map對象

上面例子的map1中的key是map對象。


key 是函數

ES6 Map對象


運行結果

ES6 Map對象

上面的代碼。第22行,map增加了一個屬性。key是一個函數,value是一個字符串。


key 是 NaN

ES6 Map對象

運行結果:

ES6 Map對象


提示

雖然在js的判斷語句中, NaN 和任何值甚至和自己都不相等,但是NaN作為Map的key來說是就是一個。


02

Map 的迭代


下面來看看Map的兩種迭代方式。

for...of 迭代


ES6 Map對象


運行結果:

ES6 Map對象

ES6 Map對象


forEach() 迭代


ES6 Map對象


運行結果:

ES6 Map對象


提示

1、forEach中只有一個參數的時候,該參數是value;

2、forEach中如果有兩個參數的時候,需要注意它跟for...of的區別,forEach中的兩個參數分別是value和key,它跟for...of是反的。


03

Map 對象的操作

Map 與 Array的轉換

ES6 Map對象


運行結果

ES6 Map對象


注意

Map轉換成數組是一個二維數組。同理要想一個數組能夠轉換成Map,該數組必須是二維數組。


Map 的克隆


ES6 Map對象


運行結果:

ES6 Map對象

注意

該拷貝是深拷貝。也就是說改變第一個map中的key/vlaue不會影響到拷貝之後的新值。


Map 的合併

ES6 Map對象

運行結果:

ES6 Map對象


分享到:


相關文章: