Set
- Set数据结构是ES6新增的,是一个数组结构,其数据不重复,且数组中的数据类型没有限制。
- Set数据结构的键和值是一致的,所以取得的键和值结果表现是一致的。
- Set数据结构具有的属性和方法如下
- constructor 默认指向Set数据结构
- size方法,和length行为相似,返回Set数据结构的数据长度
- values和keys和entries,分别获得键和值和键值对的遍历结构
- forEach遍历
- add、delete、has、clear
- Set可以用于去重,利用[...new Set()]的方式或者Array.from(new Set())的方式
WeakSet
- ES6新增,和Set相似但有不同。存储不重复数据,数据类型仅限于对象,且对对象的引用不会产生对象的应用计数。
- 具有方法:add、delete、has
- 不能遍历
- WeakSet的数组存放的数据是变动的,因为其对对象的引用是不参与对象的引用计数的,所以其引用的对象可能被垃圾回收机制回收,从而导致WeakSet的数据是变动的。
Map
- Map数据结构的出现是为了弥补对象的键名只能是字符串的缺点,故其键名可以是任何数据结构
- Map的键名不能重复,实质是键名指向的内存空间不能相同。因此对基本数据类型不能同名,而对引用类型,只要其引用指向的内存地址不同时可以同名。
- Map和Set一样具有size、和一些遍历方法:keys、values、entries、forEach
- Map具有自己的方法:set、get、delete、has、clear
- Map可以通过new Map( [ [键值对数组],...])的方式创建
WeakMap
- WeakMap和Map的关系类似于WeakSet和Set的关系,WeakMap的键名只能是对象,且不计入对象的引用计数。
- WeakMap没有遍历方法,没有长度值size。
- WeakMap具有set、get、delete、has方法。
- 使用WeakMap的一大优势是可以避免内存泄漏。