ES6 提出Map对象,Map 对象类似与 object 保存键值对 ,键值可以为任意值
创建
Map 对象通过构造函数的方式创建
var map=new Map()
通过 set
、get
方法添加、获取键值对。通过has
方法判断是否存在某个键,通过delete
删除属性
var map=new Map()
map.set('a',1)
map.set('b',2)
console.log(map.get('a'))//1
也可以通过类似键值对的格式创建
var map=new Map([['a',1],['b',1]])
console.log(map.get('a'))//1
object 和 Map 的区别
Map 类似与object 的存储但是相较于object 还是有很多区别的
-
Object 的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值。
var obj={} var map=new Map() map.set(obj,'这是对象对应的值') console.log(map.get(obj))//这是对象对应的值
如果使用 object 创建则报错 (Map的键可以使用任意值)
使用空对象需要注意引用问题:
var map=new Map() map.set({},'这是对象对应的值') console.log(map.get({}))//undefined
-
Map 是有序的,而object 不是.Map 遵循FIFO原则(First In First Out,先进先出,后进后出)
-
Map 可以直接通过size属性获取长度,而object需要自己手动计算、
var map=new Map() map.set('a',1) map.set('b',2) console.log(map.size)//2
对象只有先获取所有的键,在获取键组成的数组获取长度
var obj={a:1,b:2} console.log(Object.keys(obj).length)//2
-
object 是不可迭代的,而map 是,map可以通过
for...of
和forEach
进行遍历,相较于object 更加的方便var map=new Map([['a',1],['b',2]]) map.forEach(e=>{ console.log(e) // 1 2 }) for(let i of map){ console.log(i) //(2) ["a", 1] //(2) ["b", 2] }
-
在频繁操作键值对时,Map比object更高效