ES6中的数据结构WeakSet

本文介绍了ES6中的数据结构WeakSet,它与Set相似但不重复的值必须是对象且不可遍历。WeakSet的值是弱引用,允许垃圾回收机制自动回收不再被引用的对象。它提供了add、delete和has三个方法。WeakSet常用于存储DOM节点以避免内存泄漏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

小伙伴们大家好。前面一篇文章中我们已经分享了一个ES6中的数据结构Set,掌握了Set的一些特点和方法,相信对我们日后开发一定会有很大的帮助。接下来我们再来看es6中与Set非常类似的另外一个数据结构WeakSet。

WeakSet

WeakSet 数据结构与Set类似,也是不重复的值的集合,同时也是一个构造函数。但有2点不同:WeakSet的值必须都是对象并且WeakSet是不可遍历的。WeakSet的特点及用法如下:

  • WeakSet也是一个构造函数,可以用new来创建WeakSet数据结构,同时WeakSet可以接收一个值为对象的数组(或者具有 iterable 接口的其他数据结构)作为参数用来初始化WeakSet
  • WeakSet的值只能是对象类型,不能是其它类型(基本数据类型)
  • WeakSet没有size属性,不能被遍历
  • WeakSet中的值也是不能重复的,跟Set一样WeakSet中两个对象永远是不相等的,即使键和值都是一样的
  • WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中。
// 1. WeakSet也是一个构造函数,可以用new来创建WeakSet数据结构
// 2. WeakSet可以接收一个值为对象的数组(或者具有 iterable 接口的其他数据结构)作为参数用来初始化WeakSet
let ws = new WeakSet([{"a":"b"},[1,2],function(){}]);

// 3. WeakSet的值只能是对象类型,不能是其它类型(基本数据类型)
let ws = new WeakSet([1,2,3]);
//结果:Uncaught TypeError: Invalid value used in weak set(…)

// 4. WeakSet没有size属性,不能被遍历
ws.size // undefined
ws.forEach // undefined
ws.forEach(function(item){ console.log(item)})
// TypeError: undefined is not a function

WeakSet 的方法

WeakSet 跟Set不同,它只提供了3个方法,因为WeakSet是不能遍历的因此对于Set中所有遍历的方法在WeakSet中都是不存在的。

  • add(value)向 WeakSet 实例添加一个新成员,value必须是对象类型否则会报错,返回值也是一个WeakSet的实例
  • delete(value)删除WeakSet中指定的成员,返回值为布尔类型,标识是否删除成功。
  • has(value)检测WeakSet中是否存在指定的成员,返回值为布尔类型,标识成员是否存在。

WeakSet的使用场景

由于WeakSet中的对象都是弱引用,不会被垃圾回收机制所考虑这一特点,因此WeakSet可以用来储存 DOM 节点,而不用担心这些节点从文档移除时,会引发内存泄漏

总结

本文分享了关于WeakSet的一些用法和特点,并与之前学过Set做了简单的比较,最后根据WeakSet的特殊特点还总结了关于它的使用场景。
喜欢的小伙伴欢迎点赞留言加关注哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值