Set 和 WeakSet 简介
在 ES6 中,Set 和 WeakSet 是两种新增的容器类型。它们都可以用来存储一组独特的值,但是在使用方法和特性上有所不同。
Set 是一种类似于数组的数据结构,但是它的成员都是唯一的,没有重复的值。Set 可以用来去除数组中的重复元素,或者判断一个元素是否存在于一个集合中。
WeakSet 与 Set 类似,但是它的成员只能是对象,且这些对象都是弱引用,即垃圾回收机制不会考虑 WeakSet 对这些对象的引用,如果这些对象没有其他的引用,则会被垃圾回收掉。因此,WeakSet 不可遍历。
Set 的应用示例
去重
Set 可以用来去除数组中的重复元素,代码如下:
const arr = [1, 2, 3, 2, 1]; const set = new Set(arr); console.log(set); // Set(3) {1, 2, 3}
判断元素是否存在
Set 可以用来判断一个元素是否存在于一个集合中,代码如下:
const set = new Set([1, 2, 3]); console.log(set.has(2)); // true console.log(set.has(4)); // false
遍历
Set 可以用 for...of 循环遍历,代码如下:
const set = new Set([1, 2, 3]); for (const item of set) { console.log(item); } // 1 // 2 // 3
WeakSet 的应用示例
缓存对象
WeakSet 可以用来缓存对象,代码如下:
// javascriptcn.com 代码示例 const cache = new WeakSet(); function heavyComputation(obj) { if (cache.has(obj)) { return cache.get(obj); } else { const result = doHeavyComputation(obj); cache.set(obj, result); return result; } }
防止内存泄漏
WeakSet 可以用来防止内存泄漏,代码如下:
// javascriptcn.com 代码示例 let timer = null; const callbacks = new WeakSet(); function createCallback() { const callback = () => { // do something }; callbacks.add(callback); return callback; } function start() { timer = setInterval(() => { for (const callback of callbacks) { callback(); } }, 1000); } function stop() { clearInterval(timer); callbacks.clear(); }
总结
Set 和 WeakSet 是 ES6 中新增的容器类型,它们都可以用来存储一组独特的值。Set 可以用来去除数组中的重复元素,或者判断一个元素是否存在于一个集合中;WeakSet 可以用来缓存对象,或者防止内存泄漏。在实际开发中,我们可以根据具体的需求选择使用 Set 或者 WeakSet。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/650c242995b1f8cacd63685f