JS-map(set)、weakMap(weakSet)

在ES6中,新增了2种数据结构-map和set,今天来聊聊它们。

定义

集合set:一组值,特点是无重复、无索引、无序性。这里的无序性是指没有索引的意思,事实上当集合利用for ··· of ···时,是可以表现出顺序的。
映射map:存在键值对关系,键映射着对应的值。特点是键可以是任何值且访问速度快,重点标识:任何值

简单使用

简要介绍他们的使用。

let s = new Set()
s.add(1)
s.add([1,2,3])
s.delete([1,2,3])   // false
s.size()
s.clear()

let m = new Map()
m.set('a',1)
m.set({},2)
m.get({}) // undefined 
m.delete({}) // false

对于map以及set,他们都是可迭代对象,可以利用for of 进行获取值,而map用的时候,可以利用结构语法同时获取key和value。
重点注意:集合的重复性是由严格相等(===)来判断的,映射也是一样。这也是为什么上面delete失败以及映射get失败的原因。

内存泄露问题

如果map中的key为一个对象,而这个对象被别的引用,且我们无法delete这个key(我们并不知道这个对象对应的地址是啥),导致了这个key无法被垃圾回收,从而导致内存泄露问题。

weakMap(weakSet)

针对map的强引用问题,js推出了2种数据结构。先来说说他们的特点

1、weakMap(weakSet)的键必须是对象或者数组,因为原始值不受垃圾回收的影响
2;weakMap(weakSet)没有size函数,因为他们随时会被垃圾回收而size会改变;
3、weakMap(weakSet)所包含的函数比较少,只有get(weakSet没有类似get的方法)set(add)、has、delete,且他们不再是可迭代对象了。(也就是无法用for of 语法了。)

未完待续·····

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值