WeakMap 和 WeakSet 与 Map 和 Set 类似,但在内存管理方面存在关键差异。 WeakMap 和 WeakSet 都允许存储对象,但它们 不会阻止在其他地方不再引用键或值时对它们进行垃圾回收。这使得它们在您需要存储有关对象的元数据但不希望存储不必要地保持这些对象处于活动状态的情况下非常有用。
WeakMap 是键值对的集合,其中 键必须是对象,值可以是任何数据类型。 WeakMap 的关键特性是,当没有其他对键的引用时,它不会阻止其键被垃圾收集。
您可以使用 WeakMap 构造函数创建 WeakMap,并传递键值对数组:
const weakMap = new WeakMap();
使用 set() 方法添加条目:
const weakMap = new WeakMap();
const obj = {}; const weakMap = new WeakMap(); weakMap.set(obj, 'This is a weak map entry'); console.log(weakMap.get(obj)); // Output: 'This is a weak map entry'
WeakSet 与 Set 类似,但它只允许将 对象 存储为值,并且还允许对其元素进行自动垃圾回收当集合中没有存储对象的引用时。
您可以使用 WeakSet 构造函数创建 WeakSet:
const obj1 = {}; const obj2 = {}; const weakMap = new WeakMap(); weakMap.set(obj1, 'value1'); weakMap.set(obj2, 'value2'); console.log(weakMap.get(obj1)); // Output: 'value1' console.log(weakMap.has(obj2)); // Output: true weakMap.delete(obj1); console.log(weakMap.has(obj1)); // Output: false
使用 add() 方法添加条目:
const weakMap = new WeakMap();
const obj = {}; const weakMap = new WeakMap(); weakMap.set(obj, 'This is a weak map entry'); console.log(weakMap.get(obj)); // Output: 'This is a weak map entry'
Feature | WeakMap | WeakSet | Map | Set |
---|---|---|---|---|
Key/Value Types | Keys must be objects, values can be any type | Values must be objects | Keys and values can be any type | Values must be unique, any type |
Garbage Collection | Automatically garbage-collected when no references to the key | Automatically garbage-collected when no references to the value | Does not remove entries unless manually deleted | Does not remove entries unless manually deleted |
Iterability | Not iterable | Not iterable | Iterable (can loop through entries) | Iterable (can loop through values) |
Methods | set(), get(), has(), delete() | add(), has(), delete() | set(), get(), has(), delete() | add(), has(), delete() |
WeakMap 用例:
WeakSet 用例:
嗨,我是 Abhay Singh Kathayat!
我是一名全栈开发人员,拥有前端和后端技术方面的专业知识。我使用各种编程语言和框架来构建高效、可扩展且用户友好的应用程序。
请随时通过我的商务电子邮件与我联系:kaashshorts28@gmail.com。
以上是掌握 JavaScript 中的 WeakMap 和 WeakSet:高效内存管理的详细内容。更多信息请关注PHP中文网其他相关文章!