ES6数据结构之Set、WeakSet、Map、WeakMap大比拼

前言

小伙伴们大家好。前面我们已经对Set、WeakSet、Map、WeakMap四种数据结构的特点及用法分别做了分享和介绍。为了让小伙伴们能够更直接的理解4种数据结构的异同,本篇文章将会对这四种数据结构的特点做一个统一的汇总和对比。

特点

  • Set
    • Set本质是构造函数,可接收一个数组(或者具有 iterable 接口的其他数据结构)作为参数用来初始化Set
    • Set中的值可以是任意类型的,但必须不能重复,所有值都是唯一的,因此可以用来进行数组去重使用
    • Set中认为NaN和NaN是同一个值,因此Set中只能有一个NaN值
    • Set中两个对象永远是不相等的,即使键和值都是一样的
    • Set也可以为字符串去重
    • 在向Set添加值的时候不会发生类型转换,因此“5”和5是两个值
    • Set 是可遍历的
  • WeakSet
    • WeakSet是构造函数,可接收一个值为对象的数组(或者具有 iterable 接口的其他数据结构)作为参数用来初始化WeakSet
    • WeakSet的值只能是对象类型,不能是其它类型(基本数据类型)
    • WeakSet没有size属性,不能被遍历
    • WeakSet中的值也是不能重复的,跟Set一样WeakSet中两个对象永远是不相等的,即使键和值都是一样的
    • WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中。
  • Map
    • Map是键值对的集合,键值不限于字符串,可以是任意数据类型
    • Map通过set方法添加成员,通过get方法来获取成员
    • Map也是构造函数,也可以接受一个数组作为参数,但该数组的成员也必须是一个个表示键值对的数组。例如:[[“name”,“Alvin”],[“age”,18]]
    • 不仅仅是数组,任何具有 Iterator 接口、且每个成员都是一个双元素的数组的数据结构都可以当作Map构造函数的参数。包括Set和Map本身。
    • 如果对同一个键多次赋值,后面的值将覆盖前面的值
    • 如果读取一个不存在的键则返回undefined
    • 只有对同一对象的引用,Map才会视为同一个键。也就是说两个对象的内存地址是一样的,才会被视为是同一个键。(Map 的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键)
    • 如果Map的键值是一个基本类型(数字,字符串,布尔等),则只要两个值严格相等(类型和值都相等)才算是同一个键,如0和-0就是同一键,而true和"true"则是两个键
    • undefined 和 null是两个不同的键
    • NaN在Map中被视为同一个键
  • WeakMap
    • WeakMap与Map一样也是使用 set 方法添加成员 get方法获取成员
    • WeakMap也是一个构造函数,也可以接受一个数组, 作为构造函数的参数
    • WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名(而Map是任何类型都可)
    • WeakMap的键名所指向的对象都是弱引用,不计入垃圾回收机制。因此,只要所引用的对象的其他引用都被清除,垃圾回收机制就会释放该对象所占用的内存。也就是说,一旦不再需要,WeakMap 里面的键名对象和所对应的键值对会自动消失,不用手动删除引用
    • WeakMap没有size属性,不能遍历

属性方法

  • Set
    • add(value)
    • delete(value)
    • has(value)
    • clear()
    • size
    • keys()
    • values()
    • entries()
    • forEach()
  • WeakSet
    • add(value)
    • delete(value)
    • has(value)
  • Map
    • set(key, value)
    • get(key)
    • has(key)
    • delete(key)
    • clear()
    • size
    • keys()
    • values()
    • entries()
    • forEach()
  • WeakMap
    • set(key, value)
    • get(key)
    • has(key)
    • delete(key)

总结

本文我们对前面所学的四种数据的特点和方法做统一整理和汇总,这样一看是不是更能直观的看出它们之间的异同呢,也更方便去理解它们。感谢小伙伴们的支持。

喜欢的小伙伴欢迎点赞留言加关注哦!

猜你喜欢

转载自blog.csdn.net/lixiaosenlin/article/details/120845032