前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >前端测试题:关于WeakMap结构,下列说法错误的是?

前端测试题:关于WeakMap结构,下列说法错误的是?

作者头像
舒克
发布2020-03-12 19:21:57
1.5K0
发布2020-03-12 19:21:57
举报
文章被收录于专栏:迈向前端工程师

考核内容: Map和WeakMap的不同点

题发散度: ★★

试题难度: ★

解题思路:

ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。

WeakMap结构与Map结构类似,也是用于生成键值对的集合。

代码语言:javascript
复制
// WeakMap 可以使用 set 方法添加成员const wm1 = new WeakMap();const key = {n: 1};wm1.set(key, 2);wm1.get(key) // 2

WeakMap与Map的区别有两点。

  • 首先,WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名。
  • 其次,WeakMap的键名所指向的对象,不计入垃圾回收机制。 WeakMap的设计目的在于,有时我们想在某个对象上面存放一些数据,形成对于这个对象的引用。

WeakMap 的键名所引用的对象都是弱引用,即垃圾回收机制不将该引用考虑在内。因此,只要所引用的对象的其他引用都被清除,垃圾回收机制就会释放该对象所占用的内存。也就是说,一旦不再需要,WeakMap 里面的键名对象和所对应的键值对会自动消失,不用手动删除引用。

ES6以前的操作方式:

代码语言:javascript
复制
const e1 = document.getElementById('foo');const e2 = document.getElementById('bar');const arr = [  [e1, 'a 元素'],  [e2, 'b 元素'],];
// 不需要 e1 和 e2 的时候// 必须手动删除引用arr [0] = null;arr [1] = null;

如果你要往对象上添加数据,又不想干扰垃圾回收机制,就可以使用 WeakMap。

总之,WeakMap的专用场合就是,它的键所对应的对象,可能会在将来消失。WeakMap结构有助于防止内存泄漏。

WeakMap 与 Map 在 API 上的区别主要是两个,一是没有遍历操作(即没有keys()、values()和entries()方法),也没有size属性。因为没有办法列出所有键名,某个键名是否存在完全不可预测,跟垃圾回收机制是否运行相关。这一刻可以取到键名,下一刻垃圾回收机制突然运行了,这个键名就没了,为了防止出现不确定性,就统一规定不能取到键名。二是无法清空,即不支持clear方法。因此,WeakMap只有四个方法可用:get()、set()、has()、delete()。

参考代码:

答案

代码语言:javascript
复制
B、键名可以是任何类型的值
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 迈向前端工程师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档