Map是ES6提供給咱們的構造函數,本質上是鍵值對的集合。他和對象相似api
特色:key對應value,key和value惟一,任何值均可以當屬性(包括對象)。但在Javascript的Object屬性和值構成的是」字符串-值「對,屬性只能是字符串,若是傳個對象字面量做爲屬性名,那麼會默認把對象轉換成字符串,結果這個屬性名就變成」[object Object]「。ES6提供了」值-值「對的數據結構,鍵名不只能夠是字符串,也能夠是對象。它是一個更完善的Hash結構。數組
建立Map數據結構
1.建立一個空mapapp
let map = new Map();
2.建立map並初始化時map和set不一樣,map只接收數組做爲參數,而且數組成員仍是一個個數組,其中包含兩個元素,一個表明鍵,一個表明值dom
let map = new Map([["name","zwq"],['age','18'],['sex',true],[{},'對象也能夠是屬性名']]);
console.log(map);//Map(4) {"name" => "zwq", "age" => "18", "sex" => true, {…} => "對象也能夠做爲屬性名"}
例如當你想把dom對象最爲屬性名時,在Object裏做爲屬性名是會被toString的{[object HTMLDivElement]: 20},這是你就可使用map會這樣存下div.wrapper => "20"}函數
使用api添加值和取值spa
map.set('name','zwq');
map.set('age','20');
console.log(map.get(wrapper)); 20
console.log(map.get({})); //undedinde 由於當前的對象不是以前的那個對象了,你須要把對象用變量存一下。
delete() 刪除鍵值對。code
clear() 清空map對象
size() 返回map的長度blog
keys() 返回全部的屬性名
has('屬性名') 看map裏面有沒有屬性 返回true,false
遍歷map
方法一
map.forEach(function(ele,key,self){ console.log(ele,key,self); //true "sex" Map(1) {"sex" => true} })
方法二 for(var prop of map){ console.log(prop); //返回把鍵值對變成數組 ["name", "zwq"] ["age", "20"]
console.log(prop[0],prop[1]); 拿到屬性名,屬性值
}