为什么在WeakMap中无法直接访问项目?当垃圾收集器删除了作为WeakMap的键的链接时,与该键关联的值也被删除了吗?
最佳答案
通过“直接访问项目”,我假设您的意思是为什么它们无法枚举?这是MDN的说明:
由于引用薄弱,因此WeakMap密钥不可枚举(即,没有方法可以为您提供密钥列表)。如果是这样,则该列表将取决于垃圾回收的状态,从而引入不确定性。如果要具有键列表,则应使用Map
。
我不确定我是否理解问题的第二部分。如果没有对键的非弱引用,则可以从WeakMap
中删除条目(即键值对)。如果从Map
或从其他任何地方删除该值,则该值将发生什么:如果该值是对该值的最后一个非弱引用,则可以进行垃圾回收。但是,只要条目(键值对)在WeakMap
中仍然存在,该值就被视为已引用,并且不会被垃圾收集。