ES6 中 Set 和 WeakSet 类型数据结构详解

1,393 阅读1分钟
原文链接: www.36nu.com

Set

Set可以用来保存对象或者基本类型,所有保存的值都是唯一的, chrome浏览器38和firefox浏览器13以上版本及nodeJS对Set支持都很不错

创建Set实例的基本方法为:

var set = new Set();
var set = new Set([1,2,3,4,4,4,4,4]);
console.log( Array.from(set) ); //输出:[ 1, 2, 3, 4 ]

可以看到,4在set里面只保存了一个, 所以Set对象可以用来给数组去重,遍历Set

for (var i of set) {
    console.log(i)
}
1
2
3
4

Set也能用来保存NaN和undefined, 如果有重复的NaN, Set会认为就一个NaN(实际上NaN!=NaN);

Set对象属性:

Set.prototype
Set.prototype.size

Set对象方法:

Set.prototype.add()
Set.prototype.clear()
Set.prototype.delete()
Set.prototype.entries()
Set.prototype.forEach()
Set.prototype.has()
Set.prototype.values()
Set.prototype[@@iterator]()

WeakSet

WeakSet是一些对象值的集合且其中的每个对象值都只能出现一次,WeakSet只能存对象类型元素,比如Object, Array, Function 等;有了弱引用的WeakSet就不用担心内存泄漏了,如果别的对象不引用该对象,这个对象会被垃圾回收机制自动回收;

WeakSet对象的方法只有三个,而且WeakSet对象没有size属性;

weakSet.add();

weakSet.delete();

weakSet.has();

如果对象不存在引用,WeakSet对象会把没有引用的对象占用的内存回收,weakSet可以用来保存DOM节点, 当节点被删除, weakSet里面的该节点如果不存在别的引用的话, 一段时间内会被内存回收.