map与weakmap_ES6 Map和WeakMap有什么区别?

Looking this and this MDN pages it seems like the only difference between Maps and WeakMaps is a missing "size" property for WeakMaps. But is this true? What's the difference between them?

解决方案The experienced JavaScript programmer will notice that this API could

be implemented in JavaScript with two arrays (one for keys, one for

values) shared by the 4 API methods. Such an implementation would have

two main inconveniences. The first one is an O(n) search (n being the

number of keys in the map). The second one is a memory leak issue.

With manually written maps, the array of keys would keep references to

key objects, preventing them from being garbage collected. In native

WeakMaps, references to key objects are held "weakly", which means

that they do not prevent garbage collection in case there would be no

other reference to the object.

Because of references being weak, WeakMap keys are not enumerable

(i.e. there is no method giving you a list of the keys). If they were,

the list would depend on the state of garbage collection, introducing

non-determinism.

[And that's why they have no size property as well]

If you want to have a list of keys, you should

maintain it yourself. There is also an ECMAScript

proposal

aiming at introducing simple sets and maps which would not use weak

references and would be enumerable.

‐ which would be the "normal" Maps. Not mentioned at MDN, but in the harmony proposal, those also have items, keys and values generator methods and implement the Iterator interface.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值