WeakMap 介绍

147 阅读3分钟
  • WeakMap

    /zh-CN/docs/Web/JavaScript/Reference/Global_Objects/WeakMap

    WeakMap 对象是一组键/值对的集合,其中的键是弱引用的其键必须是对象,而值可以是任意的。 你可以从这里了解更多关于 WeakMap 的内容:WeakMap对象。 WeakMap 的 key 只能是 Object 类型。……WeakMap() 创建一个新的 WeakMap 对象。 WeakMap.prototype.delete(key) 删除 WeakMap 中与 key 相关联的值。…

  • WeakMap() constructor

    /zh-CN/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/WeakMap

    WeakMap() 会创建一个 WeakMap 对象,该对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。……你可以从这里了解更多关于 WeakMap 的内容 WeakMap 对象 new WeakMap(); new WeakMap([iterable]); iterable Iterable 是一个数组(二元数组)或者其他可迭代的且其元素是键值对的对象…

  • 带键的集合

    /zh-CN/docs/Web/JavaScript/Guide/Keyed_collections

    WeakMap对象也是键值对的集合。它的键必须是对象类型,值可以是任意类型。它的键被弱保持,也就是说,当其键所指对象没有其他地方引用的时候,它会被GC回收掉WeakMap提供的接口与Map相同。……与Map对象不同的是,*WeakMap*的键是不可枚举的。不提供列出其键的方法。列表是否存在取决于垃圾回收器的状态,是不可预知的。 可以在"Why WeakMap?"WeakMap查看更多信息和示例。……对象内部的私有数据和方法被存储在WeakMap类型的privates变量中。所有暴露出的原型和情况都是公开的,而其他内容都是外界不可访问的,因为模块并未导出privates对象。…

  • WeakMap.prototype.set()

    /zh-CN/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/set

    …set() 方法根据指定的key和value在 WeakMap对象中添加新/更新元素。 wm.set(key, value); key 必须的。必须是对象。是要在WeakMap 对象中添加元素的key部分。 value 必须的。任意的值。……是要在WeakMap 对象中添加/元素的value部分。…

  • WeakMap.prototype.get()

    /zh-CN/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/get

    …get() 方法返回  WeakMap 指定的元素。 wm.get(key); key 必须。 想要从 WeakMap 获取的元素的键。…

  • WeakMap.prototype.has()

    /zh-CN/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/has

    …has() 方法根据WeakMap对象的元素中是否存在key键返回一个boolean值。 wm.has(key); key 必须的。用来检测WeakMap对象中是否存在元素的键为key。…

  • JavaScript 数据类型和数据结构

    /zh-CN/docs/Web/JavaScript/Data_structures

    …当 Map 和 WeakMap 把一个值和对象关联起来的时候,Set 和 WeakSet 表示一组对象。 Map 和 WeakMaps 之间的差别在于,在前者中,对象键是可枚举的。……它们的原生实现(包括 WeakMap)所需要的查询时间则是相对恒定的(呈对数增长)。 通常,可以通过直接在对象上设置属性或使用 data-* 属性,将绑定数据到 DOM 节点。然而缺陷是在任何的脚本内,数据都运行在同样的上下文中。……Map 和 WeakMap 能够方便地将数据私密地绑定到一个对象。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,来源于 JavaScript,同时也被多种语言所使用。…

  • WeakMap.prototype.delete()

    /zh-CN/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/delete

    …delete() 方法可以从一个 WeakMap 对象中删除指定的元素。 wm.delete(key); key 需要删除的元素的键 如果成功删除,返回 true,否则返回 false。…

  • WeakMap.prototype.clear()

    /zh-CN/docs/Web/JavaScript/Reference/Global_Objects/WeakMap/clear

    …Try to avoid using it. clear()用来从 WeakMap对象中移除所有元素。但不再是ECMAScript和它的实现部分。…

  • 迭代协议

    /zh-CN/docs/Web/JavaScript/Reference/Iteration_protocols

    …function* () { yield 1; yield 2; yield 3; }; [...myIterable]; // [1, 2, 3] 很多 API 接受可迭代对象作为参数,例如: new Map([iterable]) new WeakMap……new Set([iterable]) new WeakSet([iterable]) new Map([[1, 'a'], [2, 'b'], [3, 'c']]).get(2); // "b" let myObj = {}; new WeakMap

示例代码

// 1 创建WeakMap 对象
let wm = new WeakMap()
const key = {name: 'zs'}
const key2 = {name: 'zs'}
// 2 set 
wm.set(key, 'hello')
wm.set(key2, 'hello')
// 3 get
console.log(wm.get(key)); // hello
// 3 has
console.log(wm.has(key)); // true
// 4 delete
wm.delete(key)
console.log(wm.has(key)); // false
// 5 clear
wm.clear()
console.log(wm.has(key)); // false
console.log(wm.has(key2)); // false

参考MDN