标准是这么说的,毫无疑问,原始类型不能用作 a 中的键WeakMap;但添加这样的限制的技术原因是什么?
我想实现一个将 JS 值映射到 0-65535 的简单函数,如果使用;hash就很简单了。WeakMap不幸的是,我需要散列任何东西(包括符号和字符串),但这是禁止的,我想知道为什么。
小智 1
WeakMaps 旨在将一个弱引用对象映射到另一个弱引用对象。诸如String、Number等基本类型是强引用的,其设计方式是,当您将String值分配给变量时,它不会分配对源字符串的引用,而是将该值复制到新变量(因此,例如,当您更改源变量时,新变量不会更改)。
弱引用对象被垃圾收集。当脚本的任何部分都没有使用它时,它将被删除并释放内存。JS 中的原始类型是强引用的(值被复制,而不是引用),因此垃圾收集器永远不会触发该值的删除,也不会触发映射中强引用的原始类型键的删除(这与整个想法相冲突)的WeakMap)。
但是,如果您仍然需要使用原始值作为 的键WeakMap,您可以尝试一些解决方法,例如将原始值包装在某个对象中,然后使用该对象作为键。
| 归档时间: |
|
| 查看次数: |
396 次 |
| 最近记录: |