ES6提供的Map键值key不仅仅是字符串类型,可以是任意类型,如果Map的键是一个primitive,只要两个键严格相同,就视为是同一个键。
Map有以下操作方法:
map.size?返回Map结构的成员总数。
set(key,value)?:设置键名key对应的键值value,然后返回整个Map结构,如果key已经有值,则键值会被更新,否则就新生成该键。(因为返回的是当前Map对象,所以可以链式调用)
get(key)?:读取key对应的键值,如果找不到key,返回undefined。
has(key)?:返回一个布尔值,表示某个键是否在当前Map对象中。
delete(key)?:删除某个键,返回true,如果删除失败,返回false。
clear()?:map.clear()清除所有成员,没有返回值。
Map结构原生提供是三个遍历器生成函数和一个遍历方法:
const map = new Map([
? ? ["foo",1],
? ? ["bar",2],
])
//keys():返回键名的遍历器。
for(let key of map.keys()){
? ? console.log(key);? // foo bar
}
//values():返回键值的遍历器。
for(let value of map.values()){
? ? console.log(value); // 1 2
}
//entries():返回所有成员的遍历器。
for(let items of map.entries()){
? ? console.log(items);? // ["foo",1]? ["bar",2]
}
//forEach():遍历Map的所有成员。
map.forEach( (value,key,map) => {
? ? console.log(key,value); // foo 1? ? bar 2
})
WeakMap 结构与 Map 结构类似,也是用于生成键值对的集合。但是 WeakMap 只接受对象作为键名( null 除外),不接受其他类型的值作为键名。无法遍历。而且 WeakMap 的键名所指向的对象,不计入垃圾回收机制。
// WeakMap 可以使用 set 方法添加成员
const wm1 = new WeakMap();
const key = {foo: 1};
wm1.set(key, 2);
wm1.get(key) // 2