当对象作为键时,何时在WeakMap上使用Map?

时间:2016-06-02 15:26:59

标签: javascript dictionary ecmascript-6 weakmap

我曾几次将对象用作地图中的键,我用它来存储有关该特定对象的元数据。我总是使用WeakMap,因为当用作密钥的对象被垃圾收集时,地图中的条目会自动被垃圾收集。

存储元数据是我可以将对象视为地图中的键的唯一用例,但我很好奇是否有其他用例作为键的对象以及在这些情况下,您是否使用定期Map超过WeakMap

1 个答案:

答案 0 :(得分:1)

考虑建模图的实现。让我们假设图的节点可以是用户定义的对象。图形实现需要存储这些节点,但也要将它们与其他数据相关联(例如边缘(想想邻接"字典"))。我们需要一个Map,因为我们必须能够迭代所有节点(例如,netx.github.io做什么(在Python中)和我的JS端口)

即使我们不需要遍历节点,如果没有其他引用它们,我们可能也不希望它们被垃圾收集,因为这会无声地破坏图形。 / p>

- Felix Kling