Map是ES6提供給我們的構造函數,本質上是鍵值對的集合。他和對象類似 特點:key對應value,key和value唯一,任何值都可以當屬性(包括對象)。但在Javascript的Object屬性和值構成的是”字元串-值“對,屬性只能是字元串,如果傳個對象字面量作為屬性名,那麼會預設把對象轉換成字 ...
Map是ES6提供給我們的構造函數,本質上是鍵值對的集合。他和對象類似
特點:key對應value,key和value唯一,任何值都可以當屬性(包括對象)。但在Javascript的Object屬性和值構成的是”字元串-值“對,屬性只能是字元串,如果傳個對象字面量作為屬性名,那麼會預設把對象轉換成字元串,結果這個屬性名就變成”[object Object]“。ES6提供了”值-值“對的數據結構,鍵名不僅可以是字元串,也可以是對象。它是一個更完善的Hash結構。
創建Map
1.創建一個空map
let map = new Map();
2.創建map並初始化時map和set不同,map只接收數組作為參數,並且數組成員還是一個個數組,其中包含兩個元素,一個代表鍵,一個代表值
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添加值和取值
map.set('name','zwq');
map.set('age','20');
console.log(map.get(wrapper)); 20
console.log(map.get({})); //undedinde 因為當前的對象不是之前的那個對象了,你需要把對象用變數存一下。
delete() 刪除鍵值對。
clear() 清空map
size() 返回map的長度
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]); 拿到屬性名,屬性值
}