Set集合与Map集合比较
发布于 2018-12-15
特性比较 | Set | WeakSet | Map | WeakMap |
---|---|---|---|---|
初始化 | new Set([1,2,3,4]) | new WeakSet([1,2,3,4]) | new Map([["name", "Bright"], ["sex", "男"]]) | new WeakMap([["name", "Bright"], [" sex", "男"]]) |
定义 | 一种包含多个非重复值的有序列表 | 是一种特殊的 Set 集合,集合只支持存放对象弱引用 | 一种多个键值对组成的有序集合 | 是一种特殊的 Map 集合,只支持对象类型的键名 |
可否迭代 | 是 | 否 | 是 | 否 |
引用特性 | 成员对象强引用 | 成员对象弱引用 | 成员对象强引用 | 成员对象弱引用 |
属性方法 | add() has() delete() clear() forEach() keys() values() size | add() has() delete() | set() get() has() delete() clear() forEach() keys() values() size | set () get() has() delete() |
使用建议 | 由于对象判断属性存在的局限性,此集合更适用于检测给定的值在集合中是否存在。同时基于本身无重复值的特性,可做数组的去重 | 只可存放对象类型,并方便引用对象的跟踪 | 用于处理键值对数据,存放需要经常存取的数据 | 用于处理键值对数据,键名只可存放对象类型,并方便引用对象的跟踪,最大用途是保存 Web 页面的 DOM 元素 |
可否迭代
是否可迭代用于表示该集合是否支持遍历成员属性,支持包括 forEach()、keys()、values()、for…of 等方法的使用
对象局限性
对象中使用 if 来判断一个值的是否存在不够严谨,当属性本身不存在和存在并且值为 false 时,得到的判断结果是一样的,这就会带来问题。还有一种判断对象中属性是否存在的方法 in, 但是该方法会向上遍历继承的原型属性,同样带来一些未知问题,除非该对象继承自 null。
强引用
只要引用存在,垃圾回收机制不会释放被引用对象的内存空间
弱引用
引用对象被置空,集合不保存该引用,触发垃圾回收机制