在 ES6 中,为了更方便地操作集合类型的数据,新增了许多集合类型。本文将详细介绍其中的 WeakSet 类型,为读者提供深度的学习和指导意义。
什么是 WeakSet
WeakSet 是 Set 的一个变种,它们在使用时略有不同。与 Set 不同,WeakSet 不允许存储基本数据类型的值,因为 WeakSet 中存储的是对象的弱引用(即 WeakSet 中存储的对象不会影响该对象的垃圾回收)。这样做的好处是,如果一个对象在WeakSet 中被占用,它可以在不需要的时候轻松地被垃圾回收。
基本语法
创建 WeakSet 的方法与 Set 类似,只不过使用 WeakSet 构造函数。调用 WeakSet 构造函数时,可以传入一个可遍历的对象,例如一个数组或另一个 Set 或 WeakSet,以创建一个新的 WeakSet。
// javascriptcn.com 代码示例 let set = new WeakSet(); let arr = [1, 2, 3]; let obj = { x: 4, y: 5 }; set.add(arr); set.add(obj); console.log(set.has(arr)); // true console.log(set.has(obj)); // true set.delete(arr); console.log(set.has(arr)); // false
与 Set 的区别
WeakSet 与 Set 的区别在于,WeakSet 只能包含对象引用,并且这些对象不影响垃圾回收。WeakSet 不可枚举并且不能逐个项进行迭代,因此没有 for-each 方法。
// javascriptcn.com 代码示例 let weakSet = new WeakSet(); let foo = {}; let bar = {}; // 无法使用数组或字符串添加一个对象 weakSet.add(foo); weakSet.add(bar); console.log(weakSet.has(foo)); // true console.log(weakSet.has(bar)); // true weakSet.delete(bar); console.log(weakSet.has(bar)); // false
注意事项
- WeakSet 对象中只能存储对象引用,不能存储基本数据类型的值。
- WeakSet 中的元素不会阻止垃圾回收。
- WeakSet 不可枚举,没有 forEach 方法。
- WeakSet 没有 size 属性。
总结
本文详细介绍了 ES6 中的集合类型之 WeakSet。WeakSet 是 Set 的一个变种,不允许存储基本数据类型的值,并且存储的是对象的弱引用。使用 WeakSet 可以方便地进行垃圾回收。读者可以在实际编码过程中灵活应用。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654225777d4982a6ebbcbacb