Map
真正意义上的键值对存储,因为object的键只能字符串或符号,而Map的键可以是任何类型,且另一区别是map会保留插入顺序
构建
- 构造函数
- const m1 = new Map();
- const m2 = new Map([["key1","val1"],["key2","val2"]]);
属性
- size:返回大小;
- Symbol.iterator:与entries一致;
方法
- set(键,值):添加属性,返回映射本身,所以可以连用,比较重复键时使用的
类似于严格比较的SameValueZero - get/has(键):get返回键对应的值,没有则返回undefined,后者返回Boolean
- delete(键)/clear():前者删除指定,后者删除所有
- entries():返回迭代器,能以
插入顺序生成[key,value]形式的数组 - keys()/values():同上,只是生成[key]和[value]形式的数组
- forEach(function(key,value)):回调函数传入两个参数key,value
let map1= new Map([["key1","val1"]]);
map1.set("key2","val2")
.set("key3",'value3');
console.log(map1.size); //3
console.log(map1.delete("key3")); //true
console.log(map1.size); //2
console.log(map1.has('key3')); //false
console.log([...map1]); //[ [ 'key1', 'val1' ], [ 'key2', 'val2' ] ]
WeakMap
weak限制的是键只能是对象实例,weak表示弱弱的拿着,不会增加对象实例的引用数,所以不会阻止垃圾回收,同时也无法被迭代,所以没有forEach、keys、entries和clear()
构建(常见Map)
const weakmap = new WeakMap();
方法
与map相同,只是没有迭代方法
作用
用于记住映射关系,而不会影响内存对其的回收
const wm = new WeakMap();
const loginButton = document.querySelector('#login');
wm.set(loginButton,{disabled:true});
Set
加强版的Map,Map固定了格式[[key,value]],而Set没有
构建
const set = new Set();
方法与属性
- size: 元素个数
- add(元素):也可连用
- has(元素):查找是否存在元素
- delete(元素)/clear():删除元素,清空
- values/keys/entries():返回对应迭代器,entries返回[[value,value]]
WeakSet
同样值只能是对象,同时不会增加对象的引用,不影响内存的回收机制