6.2 集合引用类型Map,Set

35 阅读2分钟

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

同样值只能是对象,同时不会增加对象的引用,不影响内存的回收机制