Open lhlGitHub opened 2 years ago
Set
是es6提供的新的数据结构,类似于数组,但是成员的值都是唯一的
,没有重复的值,常常用来做数组去重
[...new Set(ArrayList)]
Set.prototype.size \ add(value) \ delete(value) \ has(value) \ clear() \
Set.prototype.keys():返回键名的遍历器 Set.prototype.values():返回键值的遍历器 Set.prototype.entries():返回键值对的遍历器 Set.prototype.forEach():使用回调函数遍历每个成员
WeakSet 结构与 Set 类似,也是不重复的值的集合。但是,它与 Set 有两个区别
1、WeakSet 的成员只能是对象
,而不能是其他类型的值
2、WeakSet 中的对象都是弱引用
,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中
WeakSet.prototype.add(value) \ delete(value) \ has(value) WeakSet 的成员是不适合引用的,垃圾回收机制何时运行是不可预测的,因此 ES6 规定 WeakSet 不可遍历。
Map 数据结构的“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键,这也是Map与对象Object的区别
Map.prototype.size \ set(key, value) \ get(key) \ delete(key) \ has(key) \ clear()
Map.prototype.keys():返回键名的遍历器。 Map.prototype.values():返回键值的遍历器。 Map.prototype.entries():返回所有成员的遍历器。 Map.prototype.forEach():遍历 Map 的所有成员。
WeakMap
与Map
的区别有两点
1、WeakMap只接受对象作为键名(null除外)
,不接受其他类型的值作为键名
2、与WeakSet一样不计入垃圾回收机制
方法:get()、set()、has()、delete()
Set
Set是无重复值的有序列表,根据
Object.is()
来判断内部值的不相等。常见API:
WeakSet
WeakSet
拥有了大部分Set有的API,除了forEach、size、clear等等。Map
Map
是无重复键名的,存放键值对的数据结构,键的去重是根据Object.is()
来判断的,键名和键值是任意数据类型。常见API:
WeakMap
WeakMap
拥有了大部分Map有的API,除了forEach、size、clear等等。区别:
Set
和Map
的API传参可以是任意数据类型的值,WeakSet
API传参和WeakMap
的key只能是对象类型的值,否则会报错;Set
在存放对象和Map
的key为对象,存放的是对象的引用,所存储的对象赋值为null
时,如果Set
实例还存在,该对象无法被GC
回收,从而无法释放内存;WeakSet
在存放对象时和WeakMap
的key为对象,存放的是对象的弱引用;不影响GC
回收;Set
和Map
可迭代;WeakSet
和WeakMap
不可迭代,无法用于for-of
循环,无法暴露出任何迭代器(例如 keys() 与 values()方法);WeakSet
和WeakMap
没有forEach方法 、size属性 、clear方法等等;