构造函数方式创建一个Map实例 参数是一个数组
数组中的每一项也得是一个单独的数组 new Map([[key,value],[key,value]])
单独数组放的是两个值 分别是key和value
在一个对象中 它的属性名必须是字符串,如果写的不是字符串默认转为字符串
而Map可以让除了字符串数据类型之外的其他数据类型作为属性名
但是Map不能放入一个未定义的变量作为属性名
属性名不能重复,重复会导致覆盖
// let map1 = new Map([[1,"good"],[2,"hello"],[3,3],[true,true],["arr",[1,2]],[arr,[1,2]]]);报错arr is not defined
let arr = [1,2];
let map1 = new Map([[1,"good"],[2,"hello"],[3,3],[true,true],["arr",[1,2]],[arr,[1,2]],[9,[1,2]]]);
console.log(map1);//展开后 发现 key的值是 1 2 3 true 1,2 发现并没有被转换为字符串
1.size:键值对个数
修改的方法: get set has delete clear
get(key) 获取value值
console.log(map1.get(true));//true
console.log(map1.get(1));//"good"
console.log(map1.get("arr"));//[1,2]
console.log(map1.get(arr));//[1,2]
console.log(map1.get(9));//[1,2]
2.set(key,value) 设置value值
返回的是修改后的实例 所以可以采用链式写法
如果之前有属性名,set会修改该属性 如果之前没有属性名 set会增加属性
console.log(map1.set(1, 2));//发现1的值从"good"修改为2
console.log(map1.set(false, "mimi"));//增加了false属性 value为"mimi"
3.has(key) 判断key是否有对应的value值
有则返回true 没有返回false
console.log(map1.has(1));//true
4.delete(key) 删除该实参传入的属性
返回值是true 表示删除成功 false表示删除失败
console.log(map1.delete(1));//true
console.log(map1);//key为1的属性已经消失不见
console.log(map1.delete(1000));//false 删除失败 没有key为1000的属性
5.clear 清空
没有返回值 把属性全部清空 没有参数
console.log(map1.clear()); //测试的时候去掉注释即可
console.log(map1);//map(0){}
6.遍历的方法:forEach keys values
map1.forEach((value,index,input)=>{
console.log(value);
console.log(index);
console.log(input);
});//都打印出了 格式如下 "hello" 2 Map(7) {2 => "hello", 3 => 3, true => true, "arr" => Array(2), Array(2) => Array(2), …}
7.keys values 用法类似 需要for of 遍历接口
for(let key of map1.keys()){
console.log(key);
}//打印出了所有key: 2,3,true,arr[1,2],9,false
for(let value of map1.values()){
console.log(value);
}//打印出了所有value
8.如何把数组变为Map实例
let ary = ["Aqing","Cyan","Vue","React","Node"];
let map = new Map();
//遍历数组接口 然后解构赋值
for(let [index,value] of ary.entries()){
map.set(index,value);
}
console.log(map);