ES6基础知识总结——Set和Map

本章介绍了关于ES6中的Set和Map的基础知识,主要参照了阮一峰老师的博客,详情请移步至:

http://es6.ruanyifeng.com/#docs/set-map

本章内容

  1. Set
  2. WeakSet
  3. Map
  4. WeakMap

ES6提供的两种新的数据结构。

10.1 set

1. 用法

set类似于数组,但是成员的值都是唯一的,没有重复的值。一般只是在set中检查某个值是否存在。

set函数可以接受一个数组(或者具有iterable接口的其他数据结构)作为参数,用来初始化。

2. 属性

set本身是一个构造函数,用来生成set数据结构。

成员总数:set.prototype.size

3. 操作方法

扫描二维码关注公众号,回复: 2693169 查看本文章

add(value):向set中添加值,set不会使用强制类型转换来判断值是否重复。

delete(value):移除值,返回一个布尔值,表示删除是否成功。

has(value):测试某个值是否在set中。

clear(value) :清除所有成员,没有返回值。

4. 遍历方法:set的遍历顺序就是插入顺序。

keys:返回键名的遍历器。

values:返回键值的遍历器。

entries:返回键值对的遍历器。

forEach():使用回调函数遍历每个成员,没有返回值。

10.2 Weak set

Set类型存储对象引用的方式,可以被成为strong set,对象存储在set的一个实例中时,实际上相当于把对象存储在变量中。只要对于set实例的引用依然存在,所存储的对象就无法被垃圾收回机制回收,从而无法释放内存。

而Weakset类型只允许存储对象弱引用,而不能存储基本类型的值,对象的弱引用在它自己成为该对象的唯一引用时,不会阻止垃圾回收。

  1. 用处

储存DOM节点,而不用担心这些节点从文档中移除时,引发内存泄漏

  1. 方法

包含add()、has()、delete()方法

  1. 与set的区别

Weakset没有size属性,没有办法遍历它的成员。成员都是弱引用,随时可能消失,遍历机制无法保证成员的存在,很可能刚刚遍历结束,成员就取不到了。

10.3 Map

Map是键值对的集合(Hash结构),常被用做缓存,存储数据以便此后快速检索。类似于对象,但是对象结构提供的是“字符串-值”的对应,Map结构提供了“值-值”的对应,是一种更完善的Hash结构实现。

  1. size属性

返回Map结构的成员总数

  1. 方法

set(key, value):如果key已经有值,则键值会被更新,否则生成该键

get(key):读取key对应的键值,若找不到key,则返回undefined

has(key):返回一个布尔值,表示某个键是否在当前Map对象之中

delete(key):删除某个键,成功则返回true

clear():清除所有的成员,没有返回值

  1. 遍历方法

keys():返回键名的遍历器

values():返回键值的遍历器

entries():返回所有成员的遍历器

forEach():遍历Map的所有成员

  1. 与其他数据结构的互相转换

Map转为数组,使用扩展运算符

数组转为Map:将数组传入Map构造函数

Map转为对象:若所有Map的键都是字符串,可以无损的转为对象;若有非字符串的键名,则该键名会被转成字符串,再作为对象的键名

对象转为Map

Map转为JSON:使用JSON.stringify()方法

JSON转为Map:使用JSON.parse()方法

10.4 WeakMap

1.与Map的区别

只接受对象作为键名,不接受其他类型的值作为键名。

WeakMap的键名指向所有的对象,不计入垃圾收回机制。

2. 用处

在浏览器中创建一个关联到特定DOM元素的对象。我们有时想在某个对象上面存放一些数据,但是这会形成对于这个对象的引用,一旦不再需要这两个对象,我们就必须手动的删除这个引用,否则垃圾回收机制就不会释放引用对象的内存,从而造成内存泄露。

说明:把这些内容记录在博客里主要是想记录自己每天学习到了哪些东西,以便日后拿来复习及参阅。

猜你喜欢

转载自blog.csdn.net/weixin_42734488/article/details/81320080