ES6的WeakMap和WeakSet有什么区别

发布时间:2025-04-14 20:17:34 作者:小樊
来源:亿速云 阅读:97

ES6 中的 WeakMap 和 WeakSet 都是集合类型,但它们之间有一些关键区别:

  1. 存储内容:

    • WeakMap 只能存储对象作为键(key),而不能存储原始值(如字符串、数字、布尔值等)。
    • WeakSet 也只能存储对象作为元素(element),不能存储原始值。
  2. 对键/元素的引用:

    • WeakMap 和 WeakSet 中的对象都是弱引用(weakly held)。这意味着如果没有其他地方引用这些对象,垃圾回收器可以自动回收它们。这对于避免内存泄漏非常有用。
    • 在普通 Map 和 Set 中,对象引用是强引用(strongly held),即使没有其他地方引用这些对象,它们也不会被垃圾回收器回收。
  3. 可枚举性:

    • WeakMap 的键/元素是不可枚举的(non-enumerable),这意味着你不能使用 for...of 循环或 WeakMap.prototype.forEach() 方法遍历 WeakMap 中的键/元素。
    • WeakSet 的元素也是不可枚举的,同样不能使用 for...of 循环或 WeakSet.prototype.forEach() 方法遍历 WeakSet 中的元素。
  4. 大小获取:

    • WeakMap 没有提供获取集合大小的方法(如 size 属性),因为你无法确定哪些对象仍然存在于 WeakMap 中。
    • WeakSet 也没有提供获取集合大小的方法。

总结一下,WeakMap 和 WeakSet 主要用于存储对象,并且它们对对象的引用是弱引用,这有助于避免内存泄漏。它们的主要区别在于 WeakMap 存储键值对,而 WeakSet 只存储元素。此外,它们都是不可枚举的,且没有提供获取集合大小的方法。

推荐阅读:
  1. ecmascript是什么意思
  2. ECMAscript指的是什么意思

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

ecmascript

上一篇:ES6的Map和Set有什么区别

下一篇:ES6的默认参数怎么设置

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》