扫码关注公众号
简述Map 的特点
1、Map默认情况下不包含任何键,所有键都是自己添加进去的。不同于Object原型链上有一些默认的键。2、Map的键可以是任意类型数据,就连函数都可以。3、Map的键值对个数可以轻易通过size属性获取,Object需要手动计算。4、Map在频繁增删键值对的场景下性能要比Object好。
什么时候用 Map
1、要添加的键值名和Object上的默认键值名冲突,又不想改名时,用Map2、需要String和Symbol以外的数据类型做键值时,用Map3、键值对很多,有需要计算数量时,用Map4、需要频繁增删键值对时,用Map
Map 和 WeakMap 的区别
Map的键可以是任意类型,WeakMap只接受对象作为键(null除外),不接受其他类型的值作为键;Map的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键;WeakMap的键是弱引用,键所指向的对象可以被垃圾回收,此时键是无效的;Map可以被遍历,WeakMap不能被遍历。
weakset和set的异同点
相同点:weakSet和set结构类似,都是不重复的值的集合不同点:1)weakSet的成员只能是对象2)weakSet中的对象都是弱引用注:set是强引用,weakSet是弱引用
简述WeakSet方法与垃圾回收
WeakSet只支持add,has和delete方法·WeakSet.add(value):向WeakSet实例添加一个新元素·WeakSet.delete(value):清除WeakSet实例的指定元素·WeakSet.has(value):返回一个布尔值,表示某个值是否在//WeakSetaddhasdelete方法constweakset=newWeakSet();constarr=["hdcms"];//添加操作weakset.add(arr);console.log(weakset.has(arr));//true//删除操作weakset.delete(arr);//检索判断console.log(weakset.has(arr));//falseWeakSet中的对象都是弱引用,如果其他对象都不再引用WeakSet集合中的对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于WeakSet之中通过定时器来查看,当WeakSet里的对象无引用时,则会被浏览器垃圾回收constweakset=newWeakSet([['jsx']]);console.log(weakset);setTimeout(()=>{console.log(weakset);//WeakSet{}},100);