likes
comments
collection
share

对Set,Map对象很熟悉?那WeakSet,WeakMap呢?

作者站长头像
站长
· 阅读数 41

前言

Set和Map是JavaScript中强大的数据结构。Set用于存储独一无二的值,而Map则是键值对的集合,可使用任意值作为键或值。它们在现代前端开发中广泛应用,尤其在数据处理和状态管理方面发挥着重要作用。随着ES6和ES7标准的不断完善,Set和Map的功能和性能也在不断提升,成为前沿技术中的重要组成部分。

今天就让我们走进它们,一起探究其魅力。

1. set基础知识

对Set,Map对象很熟悉?那WeakSet,WeakMap呢?

set本质上也是一个对象或者类数组,我们通过add增加值,但是它不能添加重复值。

对Set,Map对象很熟悉?那WeakSet,WeakMap呢?

我们也可以在构造函数内传参,但是我们一定要传一个能够被迭代的数据(比如数组),最终我们也发现不会接收重复数据。

对Set,Map对象很熟悉?那WeakSet,WeakMap呢?

values方法用来输出所有的值,也就是我们所输入的值。

对Set,Map对象很熟悉?那WeakSet,WeakMap呢?

has方法判断是不是具有这个值返回布尔值.

对Set,Map对象很熟悉?那WeakSet,WeakMap呢?

size用来返回这个对象具有的数据长度。

对Set,Map对象很熟悉?那WeakSet,WeakMap呢?

delete删除这个对象的值。

2.set基本应用

对Set,Map对象很熟悉?那WeakSet,WeakMap呢?

在了解到了那么多set的基础知识后,我们来到set的具体应用。比如我们要对数组进行去重操作,用set就非常非常方便。我们将数组放入set,然后进行解构。

对Set,Map对象很熟悉?那WeakSet,WeakMap呢?

如果是字符串,也可以。我们同样把字符串传入,然后进行解构,这个时候我们得到的是字符串数组,最后再调用一下数组转字符串的方法即可。这样子,我们就完成了字符串的去重。

对Set,Map对象很熟悉?那WeakSet,WeakMap呢?

那我们如何对它进行遍历呢?js官方提供了for of 方法可以遍历出它的每一个值。

对Set,Map对象很熟悉?那WeakSet,WeakMap呢?

这里keys表示键名,values表示键值,entries表示键值对。默认情况下键名等于键值。

对Set,Map对象很熟悉?那WeakSet,WeakMap呢?

我们还可以通过for each来遍历这个对象。打印输出键值和键名。

3. WeakSet

对Set,Map对象很熟悉?那WeakSet,WeakMap呢?

关于这个对象可就大有来头,是我们面试中可能会被问到并且生疏的题目。首先我们明确两点。

  1. 里面只放置对象和Symbol值。
  2. 里面的对象是弱引用。

对Set,Map对象很熟悉?那WeakSet,WeakMap呢?

我们通过这个垃圾回收机制来讲解一下到底为什么会这样。首先垃圾回收的时间对我们来讲是不确定的,我们并不知道系统会在什么时候调用垃圾回收。并且只有在我们不存在了对某对象的引用时此对象才会被垃圾回收掉。因此我们通过将这个对象赋值为null + 系统主动回收 来清理这个对象。我们可以发现这里对象被WeakSet引用,按理来说我们通过垃圾回收机制应该是回收不了的,因为这里我们存在了对这个对象的引用WeakSet里面是有这个对象的,我们并不知道在我们自己写的回收代码之后是否存在继续使用WeakSet,因此如果是正常的Set对象中有这个对象,我们调用主动回收也不会回收这个对象,但是由于WeakSet是弱引用类型,因此除了它之外如果不存在其他对这个对象的调用,在我们主动回收时对象会被回收掉。

这里是非常重要的内容,强烈建议大家在编译器上js文件里不同位置进行垃圾回收以及改变引用对象的方法比较内存!

对Set,Map对象很熟悉?那WeakSet,WeakMap呢?

4.WeakSet应用场景

对Set,Map对象很熟悉?那WeakSet,WeakMap呢?

这个时候我们就可以发现它的妙用。在我们点击了按钮时,这个时候按钮就被移除了,如果我们是用WeakSet去存储这个对象的时候当对象被移除,由于是弱引用,这个时候在js中也不存在这个对象了,但是如果是强引用,则还存在。而按照我们的想法都被移除了,和它有关的东西都应该被销毁。

5. Map

对Set,Map对象很熟悉?那WeakSet,WeakMap呢?

map对象通过键名键值来set存入新值,我们通过get方法搜键名获键值。

对Set,Map对象很熟悉?那WeakSet,WeakMap呢?

通过delete键名来移除值,has来判断是否具有某值。

对Set,Map对象很熟悉?那WeakSet,WeakMap呢?

size用来判断其长度。(存入几个键值对)

对Set,Map对象很熟悉?那WeakSet,WeakMap呢?

这些方法和Set类似,在此不赘述。

6. WeakMap

对Set,Map对象很熟悉?那WeakSet,WeakMap呢?

对Set,Map对象很熟悉?那WeakSet,WeakMap呢?

对Set,Map对象很熟悉?那WeakSet,WeakMap呢?

和WeakSet是类似的。

转载自:https://juejin.cn/post/7373908703433637926
评论
请登录