为什么ES6 WeakMap不可枚举?

Bar*_*vds 27 javascript enumerable weakmap ecmascript-6

在我重新进入JavaScript(和相关)之前,我已经完成了很多ActionScript 3,并且他们有一个Dictionary对象,它具有弱键,就像即将发布的WeakMap一样; 但AS3版本仍然像常规通用对象一样可枚举,而WeakMap特别没有.keys().values().

AS3版本允许我们安装一些非常有趣和有用的构造,但我觉得JS版本有些限制.这是为什么?

如果Flash VM可以做到这一点,那么是什么阻止浏览器做同样的事情呢?我读到了它是如何"非确定性"的,但这有点恰到好处?

Bar*_*vds 18

终于找到了真正的答案:http://tc39wiki.calculist.org/es6/weak-map/

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

  • 这令人失望.无法枚举弱集合确实限制了它的用处. (14认同)
  • 我不认为这实际上是这样.我认为这更多的是关于能够观察GC.如果您允许枚举WeakMaps,那么您就会将开发人员暴露给一种不确定性的形式,因为他们现在可以观察GC和内存,而他们不能这样做. (4认同)
  • 这个答案假设"在共享弱映射对象的环境中" - 但这是常见的吗? - 我以前从没听说过.而且,为什么有必要呢? - 如果是的话,只需创建一个WeakMap的例子,它自己的特殊内部弱指针集合,实际上WeakMap对象通过它的名称和定义建议(它是一个地图所以集合),所以再次,如果有/必须-be sharing,似乎没有问题,实现WeakMap实例来创建自己的集合.所以我没有看到这个答案(但是?)为什么. (2认同)