Map
Set类似于数组,Map类似于对象。
为什么要有Map,使用对象的时候,key(键)只能是基本类型值(字面量类型,多数是字符串),Map的key可以是任意类型
基本使用
var mapObj = new Map(); mapObj.set("a",1) console.log(mapObj);
我们可以看到Map有key,并且可以单独设置key,Set中的key和value是相同,上面代码中的第一个参数a是定义对象的key,第二个参数1是定义对象value
Map方法初始化赋值可以连续打点(类似于jquery的方法)
Map的初始化赋值可以是数组但不可以是对象
var map = new Map([ ['name', '小明'], ['sex', '男'] ]); console.log(map.size ) console.log(map.has('name')) console.log(map.get('name')) console.log(map.has('sex')) console.log(map.get('sex') )
注意:Map方法初始化对象的赋值只能通过set方法来设置,不能初始化结构赋值
下面的初始化赋值的写法是错误的
var mapobj = new Map({a:100});
Map的key可以是任意类型
可以设置Map的key为任意类型
var mapObj = new Map(); var objKey = { "a":1, "b":2 } mapObj.set(objKey,"2") console.log(mapObj);
如果对同一个键多次赋值,后面的值将覆盖前面的值。
let map = new Map(); map.set(1, 'a').set(1, 'b'); console.log(map.get(1))
Map的方法和属性
Map集合也有自己的size属性
let map = new Map(); map.set('obj', true); map.set('obj2', false); console.log(map.size)
Map的方法大多数和Set是相同的
set方法表示设
内部一共有两个参数,第一个参数表示设置对象的key,第二个参数表示设置对象的value
get方法表示获取值
内部的参数表示要获取的对象的key
var map = new Map(); map.set("a","1"); console.log(map.get("a"));
delete表示的是删除
参数是要删除对应的key
let map = new Map(); map.set("a","1"); map.delete("a") console.log(map);
has表示内部是否有对应的对象
let map = new Map(); map.set("a","1"); console.log(map.has("a"));
clear方法表示清空
let map = new Map(); map.set("a","1"); map.clear() console.log(map);
Map的循环方法
循环方法和set是一样的,都支持for..of,forEach,entries
for...of循环
let map = new Map(); map.set("a","1"); map.set("b","2"); for(let item of map) { console.log(item); }
遍历keys
let map = new Map(); map.set("a","1"); map.set("b","2"); for(let item of map.keys()) { console.log(item) }
遍历values
let map = new Map(); map.set("a","1"); map.set("b","2"); for(let item of map.values()) { console.log(item) }