Map
与其他常见语言中的Map类似,Map是一系列键值对的集合,以下是一些常用特性。
1 | // 外层函数 |
Set
与其他常见语言中的Set类似,Set是不含重复值的集合,以下是一些常用特性。
1 | // 定义一个Set |
注意Set是不含重复值的,如果出现了两个重复值,则set中只会保留一个,但是如果是两个相同内容不同引用的对象则可以重复存在,但如果两次添加相同引用的对象,又只会保留一个。请看下面示例。
1 | // 定义一个Set |
Weak Map
顾名思义,这个Weak Map是一个「弱」Map,这个「弱」指的是Weak Map对键的弱引用,其键(一定是对象)能够被GC回收。
首先Weak Map的键只能是对象,而不能是数字,字符串等其他类型;
其次,类型为对象的Weak Map的键是可以被GC回收的,也就是说当没有其他变量继续引用这个键的时候,该键在特定时候会被回收掉,当然Weak Map中也就不存在这个键了(实际上当外部已经不存在某个键的引用时,就永远无法访问到该键值对了,所以它必须被GC回收);
最后,Weak Map不能被循环,也没有如下方法:entries()
,keys()
,values()
,forEach()
和clear()
。
Weak Set
类似于Weak Map,Weak Set同样只接受对象,同样没有被引用的情况下会被GC回收,同样不能循环。
对比
Map、Set和Weak Map、Weak Set的主要区别。
类型 | 存储object以外的类型 | 无其他引用GC将回收 | 可循环 |
---|---|---|---|
Map/Set | 是 | 否 | 是 |
WeakMap/WeakSet | 否 | 是 | 否 |
知识点总结
- 熟悉四者的基本概念;
- 熟悉Map/Set和WeakMap/WeakSet之间的区别和联系;
- 熟练使用相应的API。