理解 Set WeakSet Map WeakMap

295 阅读1分钟
Set WeakSet Map WeakMap
语法 构造函数 new Set(),
生成Set数据结构,
类似数组,无重复成员(NaN等于自身)
构造函数new WeakSet(),
生成 WeakSet 数据结构,
类似set
成员只能是对象,对象弱引用
new Map()
类似js的object
键可以是各种类型的值
(为复杂类型时存的是地址)
new WeakMap()
类似Map,键只能对象(null除外)
键名所引用的对象都是弱引用
用法 new Set([1,2,2,3,NaN,NaN])
//[1,2,3,NaN]
new WeakSet([[1],[2]])
//{[1],[2]}
new Map([[{a:'aa'},'aa']])
//{{a:'aa'}:'aa'}
new WeakMap([[{a:'aa'},'aa']])
//{{a:'aa'}:'aa'}
属性 size: 实例总数
- size -
方法 add:添加某个值,返回set实例
delete:删除某个值,返回布尔值
has:是否存在这个值,返回布尔值
clear:清除所有成员,无返回值
keys: 返回键名数组
values:返回值数组
entries:返回[键,值]数组
forEach:遍历
(...) : 扩展运算符
add:添加对象成员
delete:删除指定的成员
has:某个成员是否存在
无法遍历
set(key,value)
get(key)
has(key)
delete(key)
clear()
keys: 返回键名数组
values:返回值数组
entries:返回[键,值]数组
forEach:遍历
(...):转为数组[[{a:'aa'},"aa"]]
set(key,value)
get(key)
has(key)
delete(key)

垃圾回收机制依赖引用计数,如果一个值得引用次数不为`0`,垃圾回收机制就不会释放这块内存,结束使用该值之后,有时会忘记取消引用,导致内存无法释放,进而可能会引发内存泄漏,weakset 弱引用,都不计入垃圾回收机制,所有不存在这问题。