gpt4 book ai didi

javascript - 在 WeakMap 中禁止原始类型作为键的技术原因是什么?

转载 作者:行者123 更新时间:2023-12-03 11:13:15 27 4
gpt4 key购买 nike

标准是这样说的,毫无疑问,原始类型不能用作 WeakMap 中的键。 ;但什么是 技术原因添加这样的限制?

我想实现一个简单的 hash将 JS 值映射到 0-65535 的函数,如果使用 WeakMap 将是微不足道的;不幸的是,我需要散列任何东西(包括符号和字符串),但这是禁止的,我想知道为什么。

最佳答案

WeakMap s 旨在将一个弱引用对象映射到另一个对象。原始类型,例如 String , Number等等都是强引用的,并且以一种方式设计,当您分配 String 时value 到变量它不会分配对源字符串的引用,而是将该值复制到新变量(因此,例如,当您更改源变量时,新变量不会更改)。

弱引用对象被垃圾收集。当脚本的任何部分都没有使用它时,它将被删除并释放内存。 JS 中的原始类型是强引用的(值被复制,而不是被引用),因此垃圾收集器永远不会触发删除该值,以及删除映射中的强引用、原始类型键(这与整个想法相冲突)的 WeakMap)。

但是如果你仍然需要使用原始值作为 WeakMap 的键,您可以尝试一些解决方法,例如将原始值包装在某个对象中,然后将该对象用作键。

关于javascript - 在 WeakMap 中禁止原始类型作为键的技术原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60024604/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com