这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战
概念
Map 对象保存键值对。任何值都可以作为一个键或一个值,可以是对象,可以是字符串,可以是函数等
常用方法
const map = new Map()
- map.set(key, value) // 设置key的值
- map.get(key) // 获取key的值
- map.has(key) // 是否含有,返回true/false
- map.delete(key) // 删除对应键
- map.size // 获取键个数
- map.clear() // 清除
- map.keys() // 返回键名的遍历器。
- map.values() // 返回键值的遍历器。
- map.entries() // 返回所有成员的遍历器
对比Object
Object
- 无顺序
- key只能是String或者Symbol
- 包含原型链上的命名冲突
- 无优化
Map
- 有顺序
- key可以是任意值
- 只包含显式插入的键,不包含原型链上的命名冲突
- 有优化
demo
- set
- get
- has
- delete
- clear
- keys
- values
- entries
Map提供了以上keys,values,entries几种迭代方法,也提供了forEach,但是如果用forEach的话会有点问题
另外需要值得一提的是Map中的key全等的问题
看一下这个例子
let map = new Map()
const obj = {}
map.set({}, "jojo")
map.set(obj, "jojo")
const a1 = map.get({})
const a2 = map.get(obj)
console.log(a1 === a2) // false
obj={},但obj不等于{}
let map = new Map()
const obj = {}
const obj2 = {}
map.set(obj2, "jojo")
map.set(obj, "jojo")
const a1 = map.get(obj2)
const a2 = map.get(obj)
console.log(a1 === a2) // true
但是obj={},obj2={},obj等于obj2,是因为{}={}
同样,不等于也取不到值,以下例子得到将是一个undefined
let map = new Map()
const obj = {}
map.set(obj, "jojo")
console.log(map.get({})) // undefined