Map,键唯一的 键值对数组,任何值(对象或者原始值) 都可以作为一个键或一个值。键是强引用存储
常用方法:set 、get 、has 、remove 、clear 、size
使用 forEach 去访问 Set 集合元素,forEach 返回的三个值分别是 value , key , Map 集合本身
let arr = new Map([ [ '我是键', '我是值' ] ]); // 初始化 Map 及加入一个键值对
arr.set( [ '小左', '程序员' ] ); // 加入一个键值对
arr.get( '小左' ) // 获得 key '小左' 的 value 值 '程序员'
arr.has( '小左' ) // true
arr.size // 长度为 2
arr.remove( '小左' ) // 删除 '小左' 的键值对
arr.clear() // 清空所有键值对
Set,唯一值数组,任何值(对象或者原始值) 都可以作为一个值。值是强引用存储
常用方法:add 、has 、delete 、clear 、size
使用 forEach 去访问 Set 集合元素,forEach 返回的三个值分别是 value , value , Set 集合本身
let arr = new Set([ '我是值' ]); // 初始化 Set 及加入一个值
arr.add( '小左' ); // 加入一个值
arr.has( '小左' ) // true
arr.size // 长度为 2
arr.delete('小左') // 删除与 '小左' 这个值相等的元素
arr.clear() // 清空所有值
WeakSet,唯一值的 对象弱引用数组,它只存储 对象 的 弱引用 ,并且不可以存储原始值;集合中对象的弱引用如果是对象唯一的引用 ( 对象的其他强引用都被清除时,已经不存在其他强引用 ) ,则该值会被回收并释放相应内存。
可用方法:add 、has 、delete,只支持传入对象,非对象参数 add 会报错,has 与 delete 会返回 false
WeakSet 集合不可迭代,不暴露任何迭代器 ( 如 keys()、values() 方法 ) 。所以不能用于 for / of 循环,无法通过程序本身来检测其中的内容。不支持 forEach() 方法,不支持 size 属性;
let arr = new WeakSet(); // 初始化 WeakSet
let key = {}
arr.add( key ); // 加入对象 key 的弱引用
arr.has( key ) // true
arr.delete( key ) // 删除数组里的 key 对象
arr.add( key ); // 重新加入对象 key 的引用
key = null; // 移除对象 key 的最后一个强引用
arr.has( key ) // false ( WeakSet 中的引用也自动移除 )
WeakMap,唯一键的 对象弱引用数组,只支持对象类型的键名 ,集合中保存的键是这些对象的弱引用,如果键的弱引用是对象唯一的引用 ( 对象的其他强引用都被清除时,已经不存在其他强引用 ) ,则该键值对会被回收并释放相应内存。
可用方法:set 、get 、has、delete,键名只支持传入对象,非对象参数 set 会报错,has 与 delete 会返回 false
WeakSet 集合不可迭代,特性与 WeakSet 一样。
let arr = new WeakMap(); // 初始化 WeakMap
let key = {}
arr.set( key , '小左' ); // 加入键名为 对象key的弱引用 的 键值对
arr.has( key ) // true
arr.get( key ) // 小左
arr.delete( key ) // 删除数组里的 key 对象
arr.set( key , '小左' ); // 重新加入键名为 对象key的弱引用 的 键值对
key = null; // 移除对象 key 的最后一个强引用
arr.has( key ) // false ( WeakSet 中的引用也自动移除 )