美文网首页
map数据结构

map数据结构

作者: 小冕 | 来源:发表于2017-07-17 09:16 被阅读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>

    相关文章

      网友评论

          本文标题:map数据结构

          本文链接:https://www.haomeiwen.com/subject/ljcfkxtx.html