Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当对象作为关键点时,何时在弱贴图上使用贴图?_Javascript_Dictionary_Ecmascript 6_Weakmap - Fatal编程技术网

Javascript 当对象作为关键点时,何时在弱贴图上使用贴图?

Javascript 当对象作为关键点时,何时在弱贴图上使用贴图?,javascript,dictionary,ecmascript-6,weakmap,Javascript,Dictionary,Ecmascript 6,Weakmap,我在地图中使用对象作为键的几次都是为了存储关于特定对象的元数据。为此,我一直使用WeakMap,因为当它用作键的对象被垃圾收集时,映射中的条目会自动被垃圾收集 存储元数据是我能想到的唯一一个将对象作为映射中的键的用例,但我很好奇是否还有其他将对象作为键的用例,如果在这些情况下,您会使用常规的Map,而不是WeakMap,请考虑一个图形建模的实现。假设图的节点可以是用户定义的对象。图形实现需要存储这些节点,但也需要将它们与其他数据(例如边(想想邻接“字典”))关联起来。我们需要一个映射,因为我们还

我在地图中使用对象作为键的几次都是为了存储关于特定对象的元数据。为此,我一直使用
WeakMap
,因为当它用作键的对象被垃圾收集时,映射中的条目会自动被垃圾收集


存储元数据是我能想到的唯一一个将对象作为映射中的键的用例,但我很好奇是否还有其他将对象作为键的用例,如果在这些情况下,您会使用常规的
Map
,而不是
WeakMap

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


即使我们不需要对节点进行迭代,如果没有其他引用,我们可能也不希望对它们进行垃圾收集,因为这样会悄悄地破坏图形


-Felix Kling

或@Bergi的可能重复我不认为这是两者的重复,因为我知道Map和WeakMap之间的区别,并且我在问题本身中陈述了WeakMap的用法。这更多的是关于知道何时在WeakMap上使用Map,实际上,这并没有涉及到相反的内容(在Map上使用WeakMap)。例如,它们不是迭代的,所以如果你需要,你会想要一个<代码> map <代码>。假设图的节点可以是用户定义的对象。图形实现需要存储这些节点,但也需要将它们与其他数据(例如边(想想邻接“字典”))关联起来。我们需要一个
映射
,因为我们还必须能够迭代所有节点(这就是(Python)和我的JS端口)。即使我们不需要迭代节点,我们可能也不希望在没有其他引用的情况下对它们进行垃圾收集,因为这样会默默地破坏图形。