Set集合与Map集合比较

发布于 2018-12-15

特性比较SetWeakSetMapWeakMap
初始化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() sizeadd() has() delete()set() get() has() delete() clear() forEach() keys() values() sizeset () get() has() delete()
使用建议由于对象判断属性存在的局限性,此集合更适用于检测给定的值在集合中是否存在。同时基于本身无重复值的特性,可做数组的去重只可存放对象类型,并方便引用对象的跟踪用于处理键值对数据,存放需要经常存取的数据用于处理键值对数据,键名只可存放对象类型,并方便引用对象的跟踪,最大用途是保存 Web 页面的 DOM 元素

可否迭代

是否可迭代用于表示该集合是否支持遍历成员属性,支持包括 forEach()、keys()、values()、for…of 等方法的使用

对象局限性

对象中使用 if 来判断一个值的是否存在不够严谨,当属性本身不存在和存在并且值为 false 时,得到的判断结果是一样的,这就会带来问题。还有一种判断对象中属性是否存在的方法 in, 但是该方法会向上遍历继承的原型属性,同样带来一些未知问题,除非该对象继承自 null。

强引用

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

弱引用

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


Copyright © 2015-2025 万趣岛 | 网站地图 | 隐私政策 | RSS | 豫ICP备2022016638号-1