一、Map
与对象的区别
(1)对象的键只能是字符串或Symbol
。强行传入对象作为键,会使用其类型名(字符串)作为键,例如:[object object]
(2)Map支持任何类型的键。(对象类型的键本质是使用其指针来作为键)
- Map.prototype.size
- Map.prototype.constructor([iterable]) 参数为二维数组
[ [key1, value1], [key2, value2] ]
- Map.prototype.set(key, value)
- Map.prototype.get(key)
- Map.prototype.delete(key)
- Map.prototype.clear()
- Map.prototype.has(key)
- Map.prototype.forEach()
- Map.prototype.keys()
- Map.prototype.values()
- Map.prototype.entries()
二、WeakMap
与Map的区别:WeakMap的键只能是对象(
null
除外)
- WeakMap.prototype.constructor([iterable]) 参数为二维数组
[ [key1, value1], [key2, value2] ]
,key
只能为非null
的 对象 - WeakMap.prototype.set(key, value)
- WeakMap.prototype.get(key)
- WeakMap.prototype.has(key)
- WeakMap.prototype.delete(key)
WeakMap中的键与 WeakSet 类似,是弱引用,不计引用次数,若无其他地方的引用,会被垃圾回收机制回收。但需要注意的是,WeakMap的值是正常引用,会计算引用次数。
三、WeakMap的实际应用场景
与WeakSet 类似
- 储存 DOM 节点,而不用担心这些节点从文档移除时,会引发内存泄漏