简介
在 JavaScript 中,对象的键默认都是字符串类型。如果我们想使用非字符串类型(例如对象、数组等)作为键,可以使用 WeakMap
。
WeakMap
是一种弱引用集合,它的键必须是对象,值可以是任意类型。WeakMap
的键是弱引用,当键对象被垃圾回收时,它对应的键值对也会自动被删除。
安装
我们可以通过 npm 安装 WeakMap
包:
npm install weakmap
在代码中引入 WeakMap
:
const WeakMap = require('weakmap');
还可以在浏览器环境中使用 WeakMap
,无需安装任何包。只需要在 HTML 文件中添加以下代码即可:
<script src="https://cdn.jsdelivr.net/npm/weakmap"></script>
使用方法
创建 WeakMap
我们可以使用以下语法创建一个 WeakMap
对象:
const wm = new WeakMap();
添加键值对
我们可以使用以下语法向 WeakMap
中添加键值对:
const keyObj = {}; const value = 42; wm.set(keyObj, value);
获取值
我们可以使用以下语法获取 WeakMap
中键对应的值:
wm.get(keyObj); // 42
如果键不存在,则返回 undefined
。
检测键是否存在
我们可以使用以下语法检测 WeakMap
中是否存在指定键:
wm.has(keyObj); // true
如果键存在,则返回 true
;如果键不存在,则返回 false
。
删除键值对
我们可以使用以下语法从 WeakMap
中删除键值对:
wm.delete(keyObj);
如果删除成功,则返回 true
;如果键不存在,则返回 false
。
示例代码
以下是一个使用 WeakMap
的示例代码:
-- -------------------- ---- ------- ----- -- - --- ---------- ----- ----- - ------------- - ------------ ---- - ------------- ------ - ----- --- - ------------- --------- - ------ - ------------- - ----- --- - ------------- ------ ---------- - - ----- ---- - --- -------- ----- ---- - --- -------- ------------------- ---- ------------------- --------- --------------------------------- -- -- --------------------------------- -- ------- --------------------------------- -- ---------
在上面的示例中,我们创建了一个 MyObj
类,它的内部使用了一个 WeakMap
对象来存储每个实例的属性。这样就不需要扩展原型或创建闭包来存储属性了,也可以避免属性名冲突的问题。
总结
WeakMap
是一种弱引用集合,它可以用来存储非字符串类型的键值对。它的键是弱引用,当键对象被垃圾回收时,它对应的键值对也会自动被删除。在使用 WeakMap
时需要注意,它的键必须是对象,值可以是任意类型。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/180964