map数据结构

2017-07-17  本文已影响0人  小冕

Map 的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键。

const map = new Map();
const k1 = ['a'];
const k2 = ['a'];
map.set(k1, 111)
map.set(k2, 222);
map.get(k1) // 111
map.get(k2) // 222

上面代码中,变量k1和k2的值是一样的,但是它们在 Map 结构中被视为两个键。

由上可知,Map 的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键。这就解决了同名属性碰撞(clash)的问题,我们扩展别人的库的时候,如果使用对象作为键名,就不用担心自己的属性与原作者的属性同名。
WeakMap与Map的区别有两点。
首先,WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名。

const map = new WeakMap();
map.set(1, 2)
// TypeError: 1 is not an object!
map.set(Symbol(), 2)
// TypeError: Invalid value used as weak map key
map.set(null, 2)
// TypeError: Invalid value used as weak map key

上面代码中,如果将数值1和Symbol值作为 WeakMap 的键名,都会报错
其次,WeakMap的键名所指向的对象,不计入垃圾回收机制。

内容来自<a href="http://es6.ruanyifeng.com/#docs/set-map">官网</a>

上一篇 下一篇

猜你喜欢

热点阅读