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类型;
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐