第 4 题:介绍下 Set、Map、WeakSet 和 WeakMap 的区别?

本文介绍了ES6引入的四种新的数据结构:Set是一个无重复值的有序列表,可用来过滤数组中的重复值;WeakSet只存储对象引用且不可遍历,用于内存管理;Map是有序的键值对,键可以是任意类型;WeakMap是特殊的Map,键为弱引用对象,便于内存管理。这些数据结构提供了不同的操作方法,如add、delete、has等,丰富了JavaScript的数据管理能力。
摘要由CSDN通过智能技术生成

1. 集合(Set)

 ES6 新增的一种新的数据结构,类似于数组,但成员是唯一且无序的,没有重复的值。
 1、Set 是无重复值的有序列表。根据 Object.is() 方法来判断其中的值不相等,以保证无重
复。
2、Set 会自动移除重复的值,因此你可以使用它来过滤数组中的重复值并返回结果。
3、Set 并不是数组的子类型,所以你无法随机访问其中的值。但你可以使用 has() 方法来判断某个值是否存在于 Set 中,或通过 size 属性来查看其中有多少个值。
4、Set 类型还拥有forEach() 方法,用于处理每个值。  

Set的操作方法有:

  1. add(value):新增,相当于 array里的push
  2. delete(value):存在即删除集合中value
  3. has(value):判断集合中是否存在 value
  4. clear():清空集合

Set的遍历方法有:

  1. keys():返回一个包含集合中所有键的迭代器
  2. values():返回一个包含集合中所有值得迭代器
  3. entries():返回一个包含Set对象中所有元素得键值对迭代器
  4. forEach(callbackFn, thisArg):用于对集合成员执行callbackFn操作,如果提供了 thisArg 参数,回调中的this会是这个参数,没有返回值

2. WeakSet

Weak Set 是只能包含对象的特殊 Set 。其中的对象使用弱引用来存储,意味着当 Weak Set
中的项是某个对象的仅存引用时,它不会屏蔽垃圾回收。由于内存管理的复杂性,
Weak Set 的内容不能被检查,因此最好将 WeakSet 仅用于追踪需要被归组在一起的对象。

WeakSet 对象允许你将弱引用对象储存在一个集合中

WeakSet 与 Set 的区别:

  • WeakSet 只能储存对象引用,不能存放值,而 Set 对象都可以
  • WeakSet 对象中储存的对象值都是被弱引用的,即垃圾回收机制不考虑 WeakSet 对该对象的应用,如果没有其他的变量或属性引用这个对象值,则这个对象将会被垃圾回收掉(不考虑该对象还存在于 WeakSet 中),所以,WeakSet 对象里有多少个成员元素,取决于垃圾回收机制有没有运行,运行前后成员个数可能不一致,遍历结束之后,有的成员可能取不到了(被垃圾回收了),WeakSet 对象是无法被遍历的(ES6 规定 WeakSet 不可遍历),也没有办法拿到它包含的所有元素

 方法:

  1. add(value):在WeakSet 对象中添加一个元素value
  2. has(value):判断 WeakSet 对象中是否包含value
  3. delete(value):删除元素 value

 

3. 字典(Map)

集合 与 字典 的区别:
  • 共同点:集合、字典 可以储存不重复的值
  • 不同点:集合 是以 [value, value]的形式储存元素,字典 是以 [key, value] 的形式储存
Map 是有序的键值对,其中的键允许是任何类型。与 Set 相似,通过调用 Object.is() 方法
来判断重复的键,这意味着能将数值 5 与字符串 "5" 作为两个相对独立的键。使用
set() 方法能将任何类型的值关联到某个键上,并且该值此后能用 get() 方法提取出来。
Map 也拥有一个 size 属性与一个 forEach() 方法,让项目访问更容易。

 

操作方法:

  • set(key, value):向字典中添加新元素
  • get(key):通过键查找特定的数值并返回
  • has(key):判断字典中是否存在键key
  • delete(key):通过键 key 从字典中移除对应的数据
  • clear():将这个字典中的所有元素删除

遍历方法

  • keys():将字典中包含的所有键名以迭代器形式返回
  • values():将字典中包含的所有数值以迭代器形式返回
  • entries():返回所有成员的迭代器
  • forEach():遍历字典的所有成员

 4. WeakMap

Weak Map 是只能包含对象类型的键的特殊 Map 。与 WeakSet 相似,键的对象引用是弱引
用,因此当它是某个对象的仅存引用时,也不会屏蔽垃圾回收。当键被回收之后,所关联的
值也同时从 Weak Map 中被移除。对于和对象相关联的附加信息来说,若要在访问它们的代
码之外对其进行生命周期管理(也就是说,当在对象外部移除对象的引用时,要求其私有数
据也能一并被销毁),则 Weak Map 在内存管理方面的特性让它们成为了唯一合适的选择。
方法:
  • has(key):判断是否有 key 关联对象
  • get(key):返回key关联对象(没有则则返回 undefined)
  • set(key):设置一组key关联对象
  • delete(key):移除 key 的关联对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值