[ECMAScript] Set和WeakSet有什么区别?

haizhilin2013
2019-10-12 14:17:00 星期六
ECMAScript
                    
                        
Set和WeakSet有什么区别?
Comments per page
< Page 1 / 1 >
forever-z-133 2019-10-15 08:09:54

Set 有 forEach keys values 等方法,类数组结构,可以 add 进各种类型,可以用 keys 和 for-in 取出;
WeakSet 没有那些方法,只能 add 进对象,没法取出,只能 has 判断。
将它们视为始终去重的数组来看就可以了。

Cai-zhiji 2023-07-04 03:51:40

Set 和 WeakSet 是两种不同的数据结构,它们在以下几个方面有区别:

  1. 存储的值类型
    Set 可以存储任意类型的值,包括原始类型和引用类型,而 WeakSet 只能存储对象引用。
  2. 值的唯一性
    Set 中的值是唯一的,即同一个值只能出现一次。当试图添加重复的值时,Set 会忽略重复的值。WeakSet 中的值也是唯一的,但是它存储的是对象的弱引用,因此不会影响对象的垃圾回收。
  3. 引用类型的处理
    Set 存储的是对值的引用,而 WeakSet 存储的是对对象的弱引用。这意味着,如果一个对象只被 WeakSet 引用,而没有被其他地方引用,该对象可能会被垃圾回收。
  4. 迭代器和方法
    Set 提供了迭代器和一系列方法(如 add、delete、has 等)用于操作和遍历集合中的值。WeakSet 不支持迭代器和直接访问其元素的方法,因为它的主要目的是为了临时存储对象引用,而不是进行遍历或操作。
  5. 可枚举性
    Set 中的值是可枚举的,可以通过迭代器遍历获取。WeakSet 中的值不可枚举,无法直接获取其元素。
排行榜
今日答题答题排行
    未答的题
    更多>
      【关注作者公众号】 以面试驱动学习--前端剑解
      【公众号推荐】 不折腾的前端和咸鱼有什么区别

      学习不打烊,充电加油只为遇到更好的自己,365天无节假日,每天早上5点纯手工发布前端知识点(死磕自己,愉悦大家)。希望大家在这浮夸的前端圈里,保持冷静,坚持每天花20分钟来学习与思考。在这千变万化,类库层出不穷的前端,建议大家不要等到找工作时,才狂刷题,提倡每日学习!欢迎大家关注3+1开源项目!希望大家每人去学习与思考!(不要为了谁而来,要为自己而努力!

      【关注官方公众号】 每天4:30-5:00推送
      【公众号推荐】 一起折腾前端算法
      【微信学习群】 备注3+1