ES6另外一个新增的数据结构是Map,用于存储映射关系。
我们在ES6之前就可以用对象来存储映射关系了,那还需要Map吗?
- 事实上对象存储映射关系只能用字符串(以及ES6新增的Symbol)作为属性名(key);
- 有时候我们可能希望通过其他类型比如对象作为key,这个时候会自动将对象转成字符串来作为key。
const obj1 = {
name:"key"
}
const map = new Map()
map.set(obj1,"这个是value")
console.log(map.get(obj1))
创建了一个Map对象,使用set将对象obj1作为key,用get获取obj1对应的value。
const map1 = new Map([
[obj1, "abc"],
[obj2, "abc"],
[obj3, "abc"],
])
console.log(map1.get(obj1));
console.log(map1.get(obj2));
console.log(map1.get(obj3));
Map的常见方法
Map常见的属性
- size:返回Map中元素的个数;
Map常见的方法:
- set(key, value):在Map中添加key、value,并且返回整个Map对象;
- get(key):根据key获取Map中的value;
- has(key):判断是否包括某一个key,返回Boolean类型;
- delete(key):根据key删除一个键值对,返回Boolean类型;
- clear():清空所有的元素; forEach(callback, [, thisArg]):通过forEach遍历Map;
Map也可以通过for of进行遍历。
和Map类型的另外一个数据结构称之为WeakMap,也是以键值对的形式存在的。
那么和Map有什么区别呢?
- 区别一:WeakMap的key只能使用对象,不接受其他的类型作为key;
- 区别二:WeakMap的key对对象想的引用是弱引用,如果没有其他引用引用这个对象,那么GC可以回收该对象;
WeakMap常见的方法有四个:
- set(key, value):在Map中添加key、value,并且返回整个Map对象;
- get(key):根据key获取Map中的value;
- has(key):判断是否包括某一个key,返回Boolean类型;
- delete(key):根据key删除一个键值对,返回Boolean类型;