首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么不推荐WeakMap clear()方法?

为什么不推荐WeakMap clear()方法?
EN

Stack Overflow用户
提问于 2016-05-30 14:54:37
回答 2查看 1.9K关注 0票数 11

我一直在JavaScript中使用JavaScript,在检查了文档之后,我意识到clear方法是不推荐/从ECMAScript 6中删除

原因是什么?为什么强迫我们做一个明确的功能,比如:

代码语言:javascript
复制
clear() {
  this._weakmap = new WeakMap()
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-30 14:56:35

“来自弱映射/密钥对值的映射只能由同时拥有WeakMap和密钥的人观察或影响。有了clear(),只有WeakMap的人才能影响到WeakMap和键到值的映射。“

马克·米勒

这一限制的原因是出于安全考虑:

弱映射的一个关键属性是无法枚举它们的键。这对于防止攻击者观察环境中共享弱映射对象的其他系统的内部行为是必要的。如果集合中的项的数目或名称可以从API中发现,即使值不是,WeakMap实例可能会创建一个以前不可用的侧通道。

tc39wiki

可枚举的WeakMap也可能影响GC,因为您可以间接地观察GC过程。因此,为了确保可预测的设计,clear也被删除。

票数 7
EN

Stack Overflow用户

发布于 2020-02-20 16:38:56

因为它阻止了WeakMap的倒置实现,所以不建议使用它。

删除WeakMap/WeakSet clear

如果WeakMaps/WeakSets不能(通过迭代)检查,并且没有明确的操作,那么可以使用倒置实现技术。这种技术消除了显著的GS复杂性。

倒置的执行情况说明,来自同一来源:

倒置实现的设计: 每个对象内部都维护一个用于实现WeakMap/Set的表(如果它包含多个元素,则可能是哈希表)。表中的条目是键/值对,其中键是WeakMap/Set实例。值是任意的ES值。让我们将这样的表称为“倒置映射”,并泛指这类WeakMaps/Set为WCs。

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

https://stackoverflow.com/questions/37528622

复制
相关文章

相似问题

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