本文为《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 的理解