zoukankan      html  css  js  c++  java
  • 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对该对象的引用;
  • 相关阅读:
    web服务器
    javascript对象属性为空的判断
    字符编码:ASCII,Unicode和UTF-8
    javascript 中英文字符长度和截断处理
    函数节流与去抖
    互联网协议
    解读 v8 排序源码
    乱序
    递归
    函数记忆
  • 原文地址:https://www.cnblogs.com/hbzyin/p/8012309.html
Copyright © 2011-2022 走看看