首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问WeakMap项目

访问WeakMap项目
EN

Stack Overflow用户
提问于 2018-06-12 16:21:24
回答 2查看 374关注 0票数 1

为什么不能直接访问WeakMap中的项目?当垃圾收集器删除作为WeakMap键的链接时,绑定到此键的值也会被删除吗?

EN

回答 2

Stack Overflow用户

发布于 2018-06-12 16:33:50

通过“直接访问项”,我想您的意思是为什么它们是不可枚举的?以下是MDN的解释:

由于引用很弱,WeakMap键是不可枚举的(也就是说,没有给出键列表的方法)。如果是,则列表将取决于垃圾收集的状态,从而引入非确定性。如果你想要一个密钥列表,你应该使用一个Map

我不确定我是否明白问题的第二部分。如果没有对键的非弱引用,则条目(即键-值对)有资格从WeakMap中删除。该值所发生的情况与从Map或其他任何地方删除该值时的情况相同:如果它是对该值的最后一个非弱引用,则它有资格进行垃圾回收。但是,只要条目(键-值对)在WeakMap中仍然存在,该值就会被认为是被引用的,并且不会被垃圾收集。

票数 1
EN

Stack Overflow用户

发布于 2018-06-12 16:38:44

WeakMap的预期功能是允许添加到其中的项被自动垃圾回收,前提是WeakMap本身是该项的唯一剩余持有者。这对于在另一个对象存在时保留对另一个对象的引用很有用(通常的用例是实现类私有属性/访问),并且还提供了以前在JavaScript中不可能实现的安全性-只有在拥有“键”的情况下才能访问值。

由于WeakMaps的性质,它的属性不能直接遍历-只有在拥有项的键的情况下才能访问该项。如果键不再存在(一个旧对象),或者键不能从代码的该部分访问,那么您就没有办法访问值。

如果您需要从其他地方访问这些值或遍历所有的值,则应该使用Map。但是,Map不允许对键或值进行垃圾收集;必须手动删除项以释放内存。

有关更多参考信息,请参见MDN docs on WeakMaps。将Description部分与Map的描述部分进行比较。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50812450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档