首页» 前端 » ES6 » ES6中的Set、WeakSet、Map、WeakMap的区别与联系

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

日期:2020年05月27日 阅读次数:2218 分类:ES6

一、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 数据结构

文章标签: