ES6-08:新增数据结构—Set、WeakSet、Map、weakMap

ES6新增了四类数据结构:分别是SetWeakSetMapWeakMap.

1. Set —没有重复成员元素的数组;

  • 本质:Set本身是一个构造函数;接收一个具有iterable接口数据结构的参数,用来生成一个没有重复元素的数组;
let nums=new Set([1,2,3,4,3,2]);//[1,2,3,4]
nums.add(2);//[1,2,3,4]
nums.add('2');//[1,2,3,4,'2']
nums.add({});//[1,2,3,4,'2',{}]  Set添加元素时不会发生类型转换,
nums.add({});//[1,2,3,4,'2',{},{}]  Set添加的对象总不相等
  • 2个属性:
// ① Set.prototype.constructor:返回Set的构造函数
// ② Set.prototype.size:返回Set实例的成员个数
  • 两类8个方法:操作方法(4种)+遍历方法(4种)

Set.add(value):向Set实例添加值value,返回Set结构本身 ;
Set.delete(value):向Set实例删除值value,返回boolean, 成功为true,失败返回false;
Set.has(value):检查Set实例是否含有值value,返回boolean,包含返回true,不包含返回false
Set.clear():清楚Set实例的所有成员,无返回值;

Set.keys():返回键名的遍历器;
Set.values():返回键值的遍历器;
Set.entries():返回键值对的遍历器;
Set.forEach((value,key)=>{},thisObj):使用回调函数遍历每个成员

  • 使用场景:①数组去重、②求数组的交集、并集、差集
// ①数组去重
let arr=[1,2,3,4,3,2,1];
let b=[...arr];//[1,2,3,4]
let a=Array.from(new Set(arr));//[1,2,3,4]
// ②数组运算

let arr1=new Set([1,2,3,4]);
let arr2=new Set([3,4,5,6]);
let union=new Set([...arr1,...arr2]);//[1,2,3,4,5,6]
let intersect=new Set([...arr1].filter(value=>b.has(value)));//[3,4]
let diffrence=new Set([...arr1].filter(value=>!b.has(value)));//[1,2]

2. WeakSet—成员只能是对象的Set

  • WeakSet的成员只能是对象不能是其他类型值;
  • WeakSet中的对象都是弱引用,即垃圾回收机制不考虑WeakSet对该对象的引用;

弱引用,即当一个WeakSet实例的成员引用对象A时,当其他对象不在引用对象A,JS的垃圾回收机制便会自动回收该对象占用的内存,不考虑WeakSet实例是否还在引用;弱引用的对象随时可能消失,无法保证成员的存在,因此WeakSet相比较Set数据结构,没有clear()方法、没有size属性、也没有遍历方法;

3. Map——键值对的键名、键值都可以为任意数据结构的对象;

ES5中对象(Object)本质上都是简直对的集合(Hash结构),但只能用字符串作为键名;Map对象可以用对象作为键名,实现真正的值-值对;对于键名、键值均为对象的Map数据,在内存中存储时,实际上是两个对象的索引值对索引值的对应关系映射;

  • 属性:Map.size返回Map实例成员的总数;

  • 方法:操作方法(5种)+遍历方法(4种)
    Map.set(key,value):设置key值对应的值,如果key存在,则覆盖原有值;
    Map.get(key):获取键名为key的键值;
    Map.has(key):检查键名key是否存在Map实例中,返回boolean值,若存在返回true,不存在返回false;
    Map.delete(key):删除键名为key的属性,返回boolean值,若删除成功返回true,失败返回false;
    Map.clear():清除Map实例的所有成员,无返回值
    Map.keys():返回键名的遍历器
    Map.values():返回键值的遍历器
    Map.entries():返回所有成员的遍历器
    Map.forEach((value,key,map)=>{},thisObj):遍历Map的所有成员

  • Map 与其他数据类型之间相互转换
    。。。
    。。。

4.WeakMap—键名只能为对象的Map,弱引用

  • WeakMap的成员的键名只能是对象不能是其他类型值;
  • WeakMap中的键名和值都是弱引用,即垃圾回收机制不考虑WeakSet对该对象的引用;
原文地址:https://www.cnblogs.com/hbzyin/p/8012309.html