#1。是否缺少.size
属性的解决方法?
在JavaScript中,我以前从未使用过WeakSet
或WeakMap
,而且我对垃圾收集的了解也不多(我是PHP + JS开发人员,因此是我第一次真正需要考虑垃圾回收)。但是我认为我现在有一个很好的WeakMap
用例。因此,我至少想开始尝试它。
我想在实验中确认的主要事情是,当对象被垃圾回收时,它们会自动删除。如果我仅可以访问实例上的WeakSet.size
/ WeakMap.size
属性以检查其大小,但在“弱”版本中不存在它们,这将很容易测试。
如果可能的话,我认为结果可能会有所不同,因为大小取决于垃圾收集器是否已运行。但这没关系,因为这些实验代码都不会在生产中使用...我只想确认我确实了解垃圾回收和WeakSet / WeakMap的工作方式。使用此功能而无法进行测试(因此无法完全理解)的想法使我感到非常不安,而且我担心,如果内存泄漏(在生产中)为时已晚,我最终会发现内存泄漏。
是否有任何变通方法或替代方法来解决WeakSet.size
和WeakMap.size
的缺乏……至少仅出于调试/测试/学习的目的?
如果不是.size
的解决方法,也许有一种方法可以检查我的WeakMap
集合实例的内存使用情况吗?那将是有用的,因为这是主要关注的地方。
我现在唯一想到的就是检查整个Node.js进程的内存...对我来说,这似乎不是很可靠。
#2。长度是什么?
对于为什么.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页面的镜像。 / p>