什麼是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
運行結果:
在上面的運行結果裡面我們會發現有個序號:0,1,2對應上面的區別2.下面有個size:4 對應了上面的區別3。
key 是對象
運行結果
上面例子的map1中的key是map對象。
key 是函數
運行結果
上面的代碼。第22行,map增加了一個屬性。key是一個函數,value是一個字符串。
key 是 NaN
運行結果:
提示
雖然在js的判斷語句中, NaN 和任何值甚至和自己都不相等,但是NaN作為Map的key來說是就是一個。
02
Map 的迭代
下面來看看Map的兩種迭代方式。
for...of 迭代
運行結果:
forEach() 迭代
運行結果:
提示
1、forEach中只有一個參數的時候,該參數是value;
2、forEach中如果有兩個參數的時候,需要注意它跟for...of的區別,forEach中的兩個參數分別是value和key,它跟for...of是反的。
03
Map 對象的操作
Map 與 Array的轉換
運行結果
注意
Map轉換成數組是一個二維數組。同理要想一個數組能夠轉換成Map,該數組必須是二維數組。
Map 的克隆
運行結果:
注意
該拷貝是深拷貝。也就是說改變第一個map中的key/vlaue不會影響到拷貝之後的新值。
Map 的合併
運行結果: