map和weakMap的区别

map
map 本质就是键值对的集合.
ES6 提供的map 数据结构,是一种更加完善的hash结构。类似对象,他的键不限制范围,可以是任意类型的,但是普通的object 中的键值对中的键只能是字符串。
如果map 的键是一个原始数据类型,只要两个键严格相同,就视为同一个键。
 
实际上,map 是一个数组,他的每一个数据也都是数组,形式如下
const map = [ ["name","张三"], ["age",18],
]
map 数据结构有以下操作方法
size :map.size 返回键值对的总数 (返回结构的成员总数)
set(key,value):设置键名和对应的键值,返回整个map对象,如果key 存在,键值会被更新,否则新生成该键值对。(返回的是当前对象,可以使用链式调用)
get(key) :该方法读取key对应的键值,找不到,返回undefined。
has(key) : 返回一个布尔值 代表某个键 是否在map 对象中
delete (key) : 删除某个键 成功返回true 失败 返回false
clear() : map.clear() 清除所用成员 ,没有返回值
 
其clear() 方法已经弃用 ,所以可以通过创建一个空的 weakmap 并替换原对象来实现清除。
 
weakmap
也是一组键值对的集合,其中键是弱引用的,键必须是对象,值可以是任意的。
weakmap 的设计目的在于,有时想在某个对象上面存放一些数据,但是这会形成对于这个对象的引用。一旦不再需要这个对象,就必须手动删除这个引用,否则垃圾回收机制就不会释放对象。
而weakmap 的 key 所引用的对象都是如弱引用,垃圾回收机制不将该引用考虑在内。所以,只要引用的对象在其他的引用都被清除,垃圾回收机制就会释放该对象所占用的内存。也就是说,一旦不需要,weakmap 里面的键名对象和所对应的键值对会自动消失,不用手动删除引用。
 
总结:
map 数据结构,他类似对象,是键值对的集合,但是键的范围不限于字符串,各种类型的值都可以作键。
weakmap 结构和map 结构类似 ,也是用于生成键值对的集合。但是weakmap 只接受对象作为键名(null 除外),不接受其他类型的值作为键名。而且weakmap 的键名所有指向的对象,不计入垃圾回收机制。
 

posted @ 2022-03-23 21:47  LJMing68  阅读(524)  评论(0)    收藏  举报