Set、WeakSet
一、Set
直观上和数组类似,最大的特点是自动去重,去重时对比的方式类似于恒等(===
)。
Set判断成员是否相同与严格相等(
===
)区别:
0和-0:Set是同一个key,
===
认为不相等NaN和NaN:Set是同一个key,
===
认为不相等
1、实例属性及方法
Set.prototype.add(value)
Set.prototype.has(value)
Set.prototype.delete(value)
Set.prototype.clear()
Set.prototype.size
2、遍历方法
Set.prototype.forEach((value, key, set) => {}, thisArg) 【推荐】
Set.prototype.entries()
Set.prototype.keys():Set.prototype.values的别名
Set.prototype.values()
注意:Set的遍历顺序就是插入顺序
3、类型转换
Array => Set
String => Set
Set => Array
4、应用
数组去重
字符串去重
数组的交、并、补集
二、WeakSet
1、成员类型只能是对象
2、成员是弱引用
WeakSet 中的对象都是弱引用,不计入垃圾回收机制,如果其他地方都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中。
3、不支持遍历
由于成员对象随时有可能被回收掉,成员数量不可预测,所以没有提供size属性,无法进行对WeakSet进行遍历。
仅以下3个实例方法:
Set.prototype.add(value)
Set.prototype.has(value)
Set.prototype.delete(value)
三、对比
成员类型
不限
对象
成员函数和属性
Set.prototype.add(value)
Set.prototype.has(value)
Set.prototype.delete(value)
Set.prototype.size
Set.prototype.clear()
Set.prototype.forEach()
Set.prototype.values()
Set.prototype.keys()
Set.prototype.entries()
WeakSet.prototype.add(value)
WeakSet.prototype.has(value)
WeakSet.prototype.delete(value)
遍历
支持
不支持
适用场景
有去重需求的数据
不关心垃圾回收机制(比如存储DOM节点)
参考:
Last updated