007-介绍下 Set、Map、WeakSet 和 WeakMap 的区别
set
- 成员不能重复;
- 没有键名,只有键值(或者说键名和键值是同一个值),所以
keys
方法和 values
方法的行为完全一致; - 可以遍历,操作方法
add()
,delete
和 has
;
WeakSet
- 成员只能是对象,而不能是其他类型的值;
- 它的对象都是弱引用,即如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存;
- 不可遍历,没有 size 属性;
- 操作方法
add()
,delete
和 has
;
Map
- 本质上是健值对的集合,类似集合;
- Map 的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键;
- Map 转为数组、数组转为 Map、Map 转为对象、对象转为 Map、Map 转为 JSON、JSON 转为 Map;
WeakMap
- 只接受对象作为键名(null 除外),不接受其他类型的值作为键名;
- 它的对象都是弱引用,即如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存。注意,WeakMap 弱引用的只是键名,而不是键值。键值依然是正常引用;
- 没有遍历操作,也没有 size 属性;
get()
、set()
、has()
、delete()
;
参考文献
Set和Map数据结构在新窗口打开