Map(映射)和weakMap(弱映射)
1.Map
Map是一种新的集合类型,我觉得就是object的加强版,object只能用数字,字符串或者符号来作为键,而Map就不一样了,可以用任何数据类型作为键。但是看到很多程序员还是用object,可能对object更熟悉点吧。
1.1 set()方法 向map里面加键值对
get()和has() 进行查询
size属性来获取映射里面的键值对的数量
delete()和clear()删除值
const m = new Map();
m.set("first","matt").set("last","joy") //向映射里面加两组键值对
alert(m.get("first")) //matt
alert(m.has("first")) //true
m.delete("first") //删除这个键值对
m.clear() //删除所有键值对
1.2 Map实例会维护键值对的插入顺序,因此可以根据插入顺序执行迭代操作
const m =new Map(["key1","value1"],["key2","value2"],["key3","value3"],);
for(let pair of m.entries()){
alert(pair)
} //["key1","value1"],["key2","value2"],["key3","value3"] entries是默认的迭代器,下面一章会讲
console.log([...m]) //["key1","value1"],["key2","value2"],["key3","value3"]
- WeakMap 为什么是weak呢,这跟垃圾回收程序有关了
2.1弱映射的键只能是object或者继承自object的类型,可以使用set()添加键值对,用get()和has()来查询,delet()来删除
2.2弱映射的键是个对象,如果没有指向这个对象的其他引用,当那行代码执行完,这对键值对就会被垃圾回收程序给回收了,那么,这个弱映射就成了空映射。
const m = new WeakMap();
m.set({},"val") //这个对象没有其他地方引用,所以,这行代码执行完,直接变成空映射
Set(集合)和WeakSet(弱集合)
1.Set(集合) 就是加强版的map
add() 增加值
has() 查询
size属性来获取元素数量
delete()和clear()来删除元素
set可以包含任何数据类型作为值,这点跟map类似
set会维护插入时的顺序,因此支持顺序迭代,这点也跟map相似
map中加的是键值对,set就不一样了,所有元素只有键没有值,值就是键
map中不允许键值对重复,set中不允许键重复
2.WeakSet(弱集合)
2.1弱集合的值只能是object或者继承自object的类型
跟WeakMap一样
只要没有指向这个对象的其他引用,当这行代码执行完毕后,这个对象就会被当成垃圾回收掉
const w = new WeakSet();
w.add({}) //这行代码执行完毕后,就会变成空集合
网友评论