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]); 拿到属性名,属性值
}