主要观点:JavaScript 的 WeakMap 不应不可迭代,应予以修复。
关键信息:
- WeakMap 用键关联值,只要键在程序中可访问。早期曾有将其作为对象属性实现的想法,这样关联就无法从映射本身枚举,所以 ES6 规定 WeakMap 不可迭代。
- 随着时间推移,分布式 WeakMap 实现策略未成功,大家都将其作为独立对象实现,且有了 WeakRef 和 FinalizationRegistry,可构建可迭代的 WeakMap。
- 现有的可迭代 WeakMap 不如浏览器提供的好,存在诸多问题,如实现复杂、需通过网络传输、占用更多内存、单线程高延迟等,而 JS 标准中其他集合都已标准化可迭代性,WeakMap 也应如此。
重要细节: - 早期实现想法下,添加键值关联到映射会设置 key[M] = value,GC 可处理死映射及相关联对象。
- 提到自己曾参与 ES6 相关工作但目前不做 JS 语言工作。
- 今早写了另一个可迭代的 WeakSet,存在与 WeakMap 相同问题。
- 感谢 Philip Chimento 提供时间线笔记和 Joyee Cheung 提供可迭代 WeakMap 实现相关笔记。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。