《深入理解ES6》阅读笔记 --- Set集合和Map集合

《深入理解ES6》阅读笔记 --- Set集合和Map集合

曾经在JavaScript中就只有一种集合可用:数组,如果可以你将对象也称之为一种集合。对于老程序员来说,数组可能会勾起很多大家的回忆,毕竟我们用数组,对象实现了诸如去重复,缓存等等,而今天,ES6带来了Set集合和Map集合,让我们更方便的去操作这些。

关于API有兴趣的朋友,可以去翻一翻文档,特别简单。

在使用Set或者WeakSet之前,你应该需要了解一下Set或WeakSet的特点:

  1. 它是一个不可重复的无序列表
  2. 值与值之间的比较是通过Object.is方法来进行的,这也意味着5和“5”会占据两个空间
  3. Set和WeakSet区别在于,WeakSet只提供了基础的方法,并且是一个弱引用。

如果你有兴趣对一个数组去除重复的值:

[...new Set([1,1,1,2,2,3,3,2,5])]

这就是Set集合给予的魅力。

关于Map和WeakMap,你应该也需要知晓其中的特点:

  1. 它是一个由多个无序键值对组成的集合
  2. 键名可以是任意的数据类型
  3. WeakMap的键名只能是对象,与WeakSet类似,它也是一个弱引用
  4. Map比WeakMap多了几个方法,但是基础的set get 都是相同的

目前,已知的Map的用途,可能就是来存储私有数据,存储对象引用(可以自动释放),大部分情况下,你基本不会用到Map。

let privateData = new WeakMap()

class Pre{
  constructor(name){
    privateData.set(this,{ name })
  }
  preName(){
    return privateData.get(this).name
  }
}

export default Pre

这些对于内存管理倒是很方便了,不需要自己手动的去跟踪信息,再手动的去设置null来断开引用。

编辑于 2018-08-12

文章被以下专栏收录