首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >前端测试题:关于WeakMap结构,下列说法错误的是?

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

作者头像
舒克
发布于 2020-03-12 11:21:57
发布于 2020-03-12 11:21:57
1.6K00
代码可运行
举报
运行总次数:0
代码可运行

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

题发散度: ★★

试题难度: ★

解题思路:

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

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

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ES6面试点-WeakMap与Map的区别
首先,WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名。
用户10106350
2022/10/28
1.1K0
Set 和 Map 数据结构
ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
小小杰啊
2022/12/21
7420
浅析 Map 和 WeakMap 区别以及使用场景
希望这一篇文章能让你对 Map 有更好的理解,或者能够帮你理解 Map 和 WeakMap
小丞同学
2021/08/16
3K1
ES6之Set和Map数据结构
ES6提供了新的数据结构Set,类似数组,元素值都是唯一的,不能重复。Set本身就是一个构造函数。
wade
2020/04/24
4250
ES6之Set和Map数据结构
ES6-标准入门·数据类型与数据结构
ES6 新增了 Synmbol 数据类型和 Set、Map 两种数据据结构,以及衍生的 WeakSet 和 WeakMap。之前工作中基本未用过,惭愧之至,努力学习之。
数媒派
2022/12/01
7060
ES6入门之Set 和 Map
Set 函数可以接受一个数组(或具有 iterable 接口的其他数据结构)作为参数,用来初始化,如下:
执行上下文
2022/07/26
4680
《你不知道的 WeakMap》番外篇
原文主要复习了“JavaScript垃圾回收机制”,“Map/WeakMap区别”和“WeakMap 属性和方法”。这很好弥补被我忽视的知识点。 另外,我们可以通过原文,以相同方式再去学 Set/WeakSet,效果会更好,本文后面也会介绍到。
pingan8787
2020/06/15
6380
你不知道的 WeakMap
相信很多读者对 ES6 引入的 Map 已经不陌生了,其中的一部分读者可能也听说过 WeakMap。既生 Map 何生 WeakMap?带着这个问题,本文将围绕以下几个方面的内容为你详细介绍 WeakMap 的相关知识。
阿宝哥
2020/05/27
1.3K0
深入理解 ES6 新增的数据结构 Map 与 WeakMap
JavaScript 的对象(Object),本质上是键值对的集合(Hash结构),但传统上只能用字符串当作键,这给它带来很大的使用限制
Leophen
2022/05/07
6990
【笔记】607- 读《你不知道的 WeakMap》笔记
原文主要复习了“JavaScript垃圾回收机制”,“Map/WeakMap区别”和“WeakMap 属性和方法”。这很好弥补被我忽视的知识点。 另外,我们可以通过原文,以相同方式再去学 Set/WeakSet,效果会更好,本文后面也会介绍到。 「总结开始,先看原文大纲:」
pingan8787
2020/06/02
4770
JavaScript 内存泄漏教程
一、什么是内存泄漏? 程序的运行需要内存。只要程序提出要求,操作系统或者运行时(runtime)就必须供给内存。 对于持续运行的服务进程(daemon),必须及时释放不再用到的内存。否则,内存占用越来
ruanyf
2018/04/12
8680
JavaScript 内存泄漏教程
【基础复盘】ES6中 的 WeakMap 你会用了吗?
只有当我们手动设置 obj = null 的时候,才有可能回收 obj 所引用的对象。
coder_koala
2022/11/28
7730
Map与WeakMap
Map对象用来保存键值对,并且能够记住键的原始插入顺序,任何对象或者原始值都可以作为键或者是值。 WeakMap对象同样用来保存键值对,对于键是弱引用的而且必须为一个对象,而值可以是任意的对象或者原始值。
WindRunnerMax
2020/08/27
5940
ECMAScript 6之Set和Map数据结构
Set 基本用法 ES6提供了新的数据结构Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set本身是一个构造函数,用来生成Set数据结构。 var s = new Set(); [2, 3, 5, 4, 5, 2, 2].map(x => s.add(x)); for (let i of s) { console.log(i); } // 2 3 5 4 上面代码通过add方法向Set结构加入成员,结果表明Set结构不会添加重复的值。 Set函数可以接受一个数组(或类似数组的对象)作
xiangzhihong
2018/02/05
1.1K0
Vue 3 高阶指南之 WeakMap
「WeakMap」 对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。
公众号---人生代码
2020/11/03
1.2K0
Vue 3 高阶指南之 WeakMap
介绍下 Set、Map、WeakSet 和 WeakMap 的区别?
向 Set 加入值的时候,不会发生类型转换,所以5和"5"是两个不同的值。Set 内部判断两个值是否不同,使用的算法叫做“Same-value-zero equality”,它类似于精确相等运算符(===),主要的区别是NaN等于自身,而精确相等运算符认为NaN不等于自身。
Javanx
2019/11/04
2.1K0
介绍下 Set、Map、WeakSet 和 WeakMap 的区别?
前端测试题: 关于WeakSet结构,说法错误的是?
WeakSet 结构与 Set 类似,也是不重复的值的集合。但是,它与 Set 有两个区别。
舒克
2020/03/12
1.5K0
干货 | WeakMap的特性及应用场景
“ 我们先从 WeakMap 的特性说起,然后聊聊 WeakMap 的一些应用场景。 ”     特性     1. WeakMap 只接受对象作为键名  const map = new WeakMap();map.set(1, 2);// TypeError: Invalid value used as weak map keymap.set(null, 2);// TypeError: Invalid value used as weak map key 2. WeakMap 的键名所引用的
腾讯NEXT学位
2019/07/15
1.3K0
干货 | WeakMap的特性及应用场景
es6之MAP
一个Object的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值,包括函数、对象、基本类型。
19组清风
2021/11/15
3510
Set、Map、WeakSet、WeakMap详细介绍
Set、Map、WeakSet和WeakMap是ES6引入的新的数据结构,它们在处理数据时具有不同的特性和用途。本文将详细介绍它们的用法、特性、区别、优缺点以及使用场景和注意事项,并给出相应的代码示例。
can4hou6joeng4
2023/11/17
3300
相关推荐
ES6面试点-WeakMap与Map的区别
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验