一、Map(映射)的用法
const myMap = new Map();//声明一个map
myMap.set("key","value"); //添加键值对
myMap.delete("key"); //删除key及对应的value值
const mapLength = myMap.size; //返回Map的长度
const myValue = myMap.get("key"); //返回key对应的value
const mapIsTrue = myMap.has("key"); //Map中是否存在此key值,返回true/false
for(const ["key","value"] of myMap){ //遍历Map
console.log(`${key} 指向了对应的 ${value}`);
}
二、Set(集合)的用法
const mySet = new Set(); //声明一个set
mySet.add("key"); //添加值
mySet.delete("key"); //删除值
const setIsTrue = mySet.has("key"); //检查值是否存在,返回true/false
const setLength = mySet.size;
for(let s of mySet){
console.log(s);
}
三、JS中Map和Set的底层实现及性质
1、JS中并没有map和set的数据类型,它们的typeof均为object,即对象;
2、Map类似于维护两个数组,Set类似于维护一个数组;
3、数组的底层也是通过对象来实现的(将元素作为标准的对象属性来存储,数字索引为其对用的属性名);
4、Map和Set的键都是唯一的,不能重复。
四、WeakMap和WeakSet
1、weak体现在对元素的引用为“弱”引用上,当除了自身外没有其他引用,则被弱引用的元素会被垃圾回收。
2、其键为对象或(非注册)symbol类型;
2、不可枚举,所以可以用来隐藏细节或者私有属性