ES6中的Set、WeakSet、Map、WeakMap的区别与联系

39 阅读2分钟

一、4种数据结构的简单介绍

1、Set

Set类似数组,但是成员的值都是唯一的,没有重复的值。

2、WeakSet

WeakSet 结构与 Set 类似,也是不重复的值的集合。

但是 WeakSet 的成员只能是对象,而不能是其他类型的值。 WeakSet 中的对象都是弱引用,不计入垃圾回收机制。

3、Map

它类似对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。

4、WeakMap

WeakMap结构与Map结构类似,也是用于生成键值对的集合。

但是 1、WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名。 2、WeakMap的键名所指向的对象都是弱引用,不计入垃圾回收机制。

这两点与“WeakSet和Set的区别”相同

二、用表格形像地说明4者的联系和区别

数据结构类似的类型限制是否是弱引用特点
Array数组成员可以是任意类型的值-
Set类似数组成员可以是任意类型的值成员的值都是唯一的
WeakSet类似数组成员只能是对象成员的值都是唯一的
----华--------丽--------的--------分隔--------线----
Object对象“键”只能是字符串-
Map类似对象“键”的范围不限于字符串-
WeakMap类似对象“键”只能是对象(null除外)-

另外 WeakSet 与 Set相比、WeakMap 与 Map相比,都有以下两处区别。原因就是WeakMap和WeakSet都是弱引用。

1、没有遍历操作(即没有keys()、values()和entries()方法),也没有size属性。 2、无法清空,即不支持clear方法。

总结:

Set和WeakSet类似数组,并且成员的值都是唯一的。WeakSet的成员和WeakMap的键都必须是对象,并且都是弱引用,可以用来避免内存溢出的问题。



参考文献

阮一峰大神的 Set 和 Map 数据结构