这是我参与11月更文挑战的第26天,活动详情查看:2021最后一次更文挑战
前言:
回顾前文对 JS 中的重要数据结构 JSON & Set 的理解/使用处理后数据进行交互, JSON是经常打交道的用到的也比较多. 本文来记录学习另外一种数据结构: WeakSet
在前面系列更文中, 我们对 JavaScript 的一些知识点进行了一些列的学习, 也有通过 JS 实现经典算法作具体学习, 小总结更多阅读-list & 经典排序算法-list
JavaScript 数据结构
ES6 新增数据结构: WeakSet 和 上文学的 **Set**结构类似, 也是不重复值的集合.
但是两者还是有区别的:
-
WeakSet的成员只能是对象, 而不能是其他类型的值 -
WeakSet中的对象都是弱引用垃圾回收机制不考虑 WeakSet 对该对象的引用. 理解: 如果其他对象都不再引用该对象, 那么即使该对象还存在于 WeakSet 之中, 垃圾回收机制会自动回收该对象所占用的内存
WeakSet()
WeakSet | MDN WeakSet 对象允许你将弱保持对象存储在一个集合中。
WeakSet() 也是一个构造函数. 通过 new 一个 来初始化一个 WeakSet 数据结构
let ws = new WeakSet();
WeakSet 语法:
new WeakSet([iterable]);
WeakSet 作为构造函数, 可以接受一个数组或类似数组的对象作为参数。(实际上, 任何具有 Iterable 接口的对象也是都可以作为 WeakSet 的参数)该数组的所有成员, 都会自动成为 WeakSet 实例对象的成员。 注意 null 被认为是 undefined
let arrarr = [[1, 2], [3, 4]];
let ws = new WeakSet(arrarr);
// WeakSet {[1, 2], [3, 4]}
上面的例子 arrarr 数组的元素是对象
而下面的例子数组 arr 的成员不是对象, 加入 WeakSet 就会报错。
let arr = [3, 4];
let ws = new WeakSet(arr);
// Uncaught TypeError: Invalid value used in weak set(…)
WeakSet 没有办法遍历它的成员, 因为它也没有size属性
WeakSet 结构的三个方法:
- WeakSet.prototype.add(value): 向 WeakSet 实例添加一个新成员
- WeakSet.prototype.delete(value): 清除 WeakSet 实例的指定成员
- WeakSet.prototype.has(value): 返回一个布尔值, 表示某个值是否在 WeakSet 实例之中
let ws = new WeakSet();
let obj = {};
let foo = {};
ws.add(window);
ws.add(obj);
ws.has(window); // true
ws.has(foo); // false
ws.delete(window);
ws.has(window); // false
更多阅读:
经典排序算法:
- 【JS-排序算法-sort()】、
- 【JavaScript-排序算法-希尔排序】、
- 【JS-排序算法-归并排序】、
- 【JavaScript-排序算法-计数排序】、
- 【JS-排序算法-冒泡排序】、
- JS-经典排序算法-选择排序、
- 【JS 实现-经典排序算法-插入排序】
- JS 实现-经典排序算法-JS 实现基数排序(radixSort)
- 学习经典排序算法-JS 实现快速排序(quickSort)
- 学习排序算法技巧-三路快排
JavaScript 学习提升
- 【Array.prototype.map() 】、
- 【JS-特殊符号-位运算符】、
- 【ES6 - for/of】、
- 【JS-逻辑运算符-短路了?】、
- 【JS-箭头函数】、
- 【JavaScript-forEach()】、
- 【JS-重要数据类型-JSON】、
- 【JS-数据结构-JSON-处理使用-前后端交互传递数据】、
- 【JS-数据结构-ES6-Set】、