ES6之Map

基本用法

在js中,对象(Object)的本质是键值对,但是它的键只能是字符串,这带来了很多不便。为了解决这个问题,ES6中提供了新的数据结构,Map。 Map和Object最大的区别就是它的key可以是对象。

看下初始化:

1
2
3
4
let map = new Map();
let obj = ["a", "b"];
map.set(obj, "content");
map.get(obj);// "content"

map还可以用数组为参数直接初始化,要求数组中的元素都是标志键值对的数组

1
let map = new Map([["key1", "value1"],[["key2"], "value2"]]);

注意事项

因为map和object是如此的相似,本文不再介绍set、get、has、遍历等方法,需要的话直接看下官网API即可。这里提下注意事项,因为key可以是对象了,所以如果key是对象,map寻找key依据key的内存地址,如果是简单类型,还是根据值。

看下例子:

1
2
3
4
5
6
7
8
9
10
let map = new Map();
let key3 = ["a"];
map.set("a",1);
map.set(["a"],1);
map.set(key3,1);
console.log(map.get("a")); // 1
console.log(map.get(["a"])); // undefined
console.log(map.get(key3)); // 1

weakMap

weakMap和weakSet有相似之处,都是为了防止内存泄露而设计,key必须是对象,也只对元素弱引用。