ES2015 中还增加了一个叫做 Map 的数据结构,这种结构和对象非常类似。本质上它们都是键值对集合,但是对象结构中的键只能够是字符串类型,所以说用对象去存放一些复杂结构类型的数据时会有些问题。
// 如果给对象添加的键不是字符串,内部会将这个数据 toString() 的结果作为键
const obj = {};
obj[true] = 'value';
obj[123] = 'value';
obj[{a : 1}] = 'value';
console.log(Reflect.ownKeys(obj)) // ["123", "true", "[object Object]"]
ES2015 中的 Map 结果就是为了解决这个问题的,Map 才能算为严格意义上的键值对集合,用来去映射两个任意类型的数据之间的对应关系。
const m = new Map();
const leo = {name: 'leo'}
m.set(leo, 90) // 设置数据
m.get(leo) // 获取数据
m.has(leo) // 判断某一个键是否存在
m.delete(leo) // 删除某一个键
m.clear() // 清空所有的键值
m.forEach((value, key) => { // 遍历
console.log('值:', value)
console.log('键:', key)
})