#1。缺乏.size
财产的解决方法?
在 JavaScript 中,我从来没有使用过任何一种WeakSet
或WeakMap
以前,而且我对垃圾回收的了解也不多(我是一名 PHP + JS 开发人员,所以这是我第一次真正需要考虑垃圾收藏)。但我认为我现在有一个很好的用例WeakMap
。所以我想至少开始尝试它。
我想在我的实验中确认的主要事情是当对象被垃圾收集时自动删除它们。WeakSet.size
如果我可以访问实例上的/属性来检查它们的大小,这将很容易测试WeakMap.size
,但它们在“弱”版本中不存在。
如果可能的话,我猜测结果可能会有所不同,因为大小将取决于垃圾收集器是否已经运行。但这没关系,因为这些实验代码都不会在生产中使用……我只是想确认我确实了解垃圾收集和 WeakSet/WeakMap 是如何工作的。在无法测试(因此完全理解)的情况下使用此功能的想法让我非常不安,我担心我最终会在为时已晚时发现内存泄漏(在生产中)。
是否有任何解决方法或替代方法来处理缺少WeakSet.size
和WeakMap.size
...至少仅用于调试/测试/学习目的?
如果不是.size
解决方法,是否有办法检查我的WeakMap
集合实例的内存使用情况?这将同样有用,因为这是主要关注点所在。
我现在唯一能想到的就是检查整个 Node.js 进程的内存......这对我来说似乎不太可靠。
#2。.length 有什么用?
此外,我对为什么.length
在两者的类构造函数/实例原型上都有一个属性WeakSet
以及WeakMap
(而不是在它们的实例上)有点困惑。
根据:
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap
...两页都说.length
是:
The value of the length property is 0.
他们真的只是一直硬编码为数字 0 吗?那有什么意义呢?
在 Google 上搜索“WeakSet.length”或“WeakMap.length”(包括精确结果的双引号)不会产生更多信息,每个结果只有大约 20 个,这只是 MDN 页面的镜像。