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。

强引用

只要引用存在,垃圾回收机制不会释放被引用对象的内存空间

弱引用

引用对象被置空,集合不保存该引用,触发垃圾回收机制