es6-Map

463 阅读1分钟

本文为《ECMAScript 6 入门》学习笔记

Map

Map 是键值对集合,与对象不同,对象只能用字符串做键值,而Map键值可以是任何类型,包括对象

用法

  • 基本用法
const map = new Map()
const o = {p:'Hello World'}

map.set(o,'content')
map.get(o) // "content"
  • map也可接收数组作为参数
const map = new Map([['name','小刘'],['age', 34]])
map.size // 2
map.has('name') // true
  • Map和Set 都可以用来生成新的Map
cosnt set = new Set([['foo',1],['bar',2]])
const map = new Map(set)

const m1 = new Map([['bar',3]])
const m2 = new Map(m1)
  • 只有对同一个对象的引用,Map结构才将其视为一个值
const map = new Map();
const k1 = ['a']
const k2 = ['a']
map.set(k1,111).set(k2,222)

map.get(k1) // 111
map.get(k2) // 222

k1 k2 值相同,但不是对同一个对象的引用,所以被Map视为两个键

  • Map一键的简单类型
    • 0 和 -0 是一个键
    • true 和 字符串 true 是不同的键
    • undefined 和 null 是两个不同的键
    • NaN 是一个键

属性方法

  • 属性
    • size
  • 方法
    • Map.prototype.set(key,value)
    • Map.prototype.get(key)
    • Map.prototype.has(key)
    • Map.prototype.delete(key)
    • Map.prototype.clear()
  • 遍历方法
    • keys()
    • values()
    • entries()
    • forEach

WeakMap

与Map区别

  • 只能对象作为键名
  • WeakMap 是弱引用 WeakMap的键名所指向的对象,不计入垃圾回收机制。 学习这个之前需要了解垃圾回收机制,详细可以看这篇文章内存管理 垃圾回收机制采用计数的方式,一个对象的引用为0 垃圾回收机制将自动回收这个对象的内存

而WeakMap 的引用不会增加对象的引用数,当对象的引用为0时,WeakMap里面的键名对象和对应键值会自动消失

我们可以通过 一个示例可以清晰的认识WeakMap的特点

以上是对wekMap 的理解