ES6:new一个Map

124 阅读1分钟

这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战

概念

Map 对象保存键值对。任何值都可以作为一个键或一个值,可以是对象,可以是字符串,可以是函数等

常用方法

const map = new Map()

  1. map.set(key, value) // 设置key的值
  2. map.get(key) // 获取key的值
  3. map.has(key) // 是否含有,返回true/false
  4. map.delete(key) // 删除对应键
  5. map.size // 获取键个数
  6. map.clear() // 清除
  7. map.keys() // 返回键名的遍历器。
  8. map.values() // 返回键值的遍历器。
  9. map.entries() // 返回所有成员的遍历器

对比Object

Object

  1. 无顺序
  2. key只能是String或者Symbol
  3. 包含原型链上的命名冲突
  4. 无优化

Map

  1. 有顺序
  2. key可以是任意值
  3. 只包含显式插入的键,不包含原型链上的命名冲突
  4. 有优化

demo

  1. set

image.png

  1. get

image.png

  1. has

image.png

  1. delete

image.png

  1. clear

image.png

  1. keys

image.png

  1. values

image.png

  1. entries

image.png

Map提供了以上keys,values,entries几种迭代方法,也提供了forEach,但是如果用forEach的话会有点问题

image.png

另外需要值得一提的是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