在JS Map数据类型中对象作为键的实际用法是什么?

问题描述 投票:4回答:1

有点害怕投票,因为这[[可能被认为是一个意见问题,但尚不清楚如何或在其他地方将此问题发布到Stack Exchange,所以我走了……我当然认为这是一个至少在这里增加价值的问题。

我最近一直在阅读Javascript的

Map数据类型(不是map()数组方法)。MDN Reference

我已阅读并遵循了各种教程/文章,这些教程/文章显示了Maps,Arrays和“标准”对象之间的异同。地图的一个独特属性是您可以使用任何数据类型作为键,包括对象。

这里是Tania Rascia的示例

// Create an object const objAsKey = { foo: 'bar' } const map = new Map() // Set this object as the key of a Map map.set(objAsKey, 'What will happen?')

这是控制台输出:

key: {foo: "bar"} value: "What will happen?"

我要问的是,这种可能性有什么好处?为什么我需要将对象用作键? 

非常感谢任何人能照到的光。

希望我不会被遗忘!

javascript javascript-objects
1个回答
0
投票
摘自我在该主题上的推文:

假设您有一个对象(例如DOM元素)要与某些数据相关联,但是您不想修改该对象以将数据直接添加到该对象中。因此,您可以使用以对象为键,关联数据为值的Map。

通常,您需要为此使用WeakMap,以便如果原始对象消失(GCd),数据也将被释放。

但是使用地图而不是weakmap的原因是地图是可迭代的,而weakmap不是。

因此,如果您愿意付出代价,需要做更多的手工工作来管理地图条目(对于更清洁的GC),那么您就可以枚举地图的所有条目,这在某些情况下可能很有用。案例。

© www.soinside.com 2019 - 2024. All rights reserved.