我一直在JavaScript中使用JavaScript,在检查了文档之后,我意识到clear方法是不推荐/从ECMAScript 6中删除。
原因是什么?为什么强迫我们做一个明确的功能,比如:
clear() {
this._weakmap = new WeakMap()
}发布于 2016-05-30 14:56:35
“来自弱映射/密钥对值的映射只能由同时拥有
WeakMap和密钥的人观察或影响。有了clear(),只有WeakMap的人才能影响到WeakMap和键到值的映射。“
这一限制的原因是出于安全考虑:
弱映射的一个关键属性是无法枚举它们的键。这对于防止攻击者观察环境中共享弱映射对象的其他系统的内部行为是必要的。如果集合中的项的数目或名称可以从API中发现,即使值不是,WeakMap实例可能会创建一个以前不可用的侧通道。
tc39wiki
可枚举的WeakMap也可能影响GC,因为您可以间接地观察GC过程。因此,为了确保可预测的设计,clear也被删除。
发布于 2020-02-20 16:38:56
因为它阻止了WeakMap的倒置实现,所以不建议使用它。
如果WeakMaps/WeakSets不能(通过迭代)检查,并且没有明确的操作,那么可以使用倒置实现技术。这种技术消除了显著的GS复杂性。
倒置的执行情况说明,来自同一来源:
倒置实现的设计: 每个对象内部都维护一个用于实现WeakMap/Set的表(如果它包含多个元素,则可能是哈希表)。表中的条目是键/值对,其中键是WeakMap/Set实例。值是任意的ES值。让我们将这样的表称为“倒置映射”,并泛指这类WeakMaps/Set为WCs。
https://stackoverflow.com/questions/37528622
复制相似问题