Set和Map

Set

  1. 属性:
    • Set.prototype.constructor:
    • Set.prototype.size:
  2. 方法
    • 操作方法
      • add
      • delete
      • has
      • clear
      • Array.from()可以将Set结构转为数组
    • 遍历方法
      • keys():返回键名的遍历器,结果与values()相同
      • values(): 返回键值的遍历器
      • entries():返回键值对的遍历器
      • forEach(value,index,array)
      • set结构实例默认可遍历
    • 扩展运算符...内部使用for...of循环,例如:[...new Set(arr)],去除重复成员
    • 数组的map,filter间接的用于`new Set([...set].map(x => x * 2));

WeakSet

  • 成员只能是对象,对象都是弱引用,webSet内的引用不计入垃圾回收机制,只适合临时存放一组对象以及对象的绑定信息,只要这些对象在外部消失,他在weakSet里面的引用就会消失。
  • weakset的成员不适合引用,会随时消失,内部成员的个数,取决于垃圾回收机制有没有运行,es6规定weakSet不可遍历
  • 属性
    • add
    • delete
    • has
  • 没有size属性,无法遍历。
  • 一个用处,储存DOM节点。

Map

  • Object,本质上是键值对的集合(Hash结构),传统上只能用字符当作键
  • Map的set方法
  • Map可以接受一个数组作为参数
const map = new Map([
  ['name', '张三'],
  ['title', 'Author']
]);
  • 多次赋值会覆盖,读取位置的键,返回undefined
  • Map的键名实际上跟内存地址绑定,只要内存地址不一样,就被认定为是两个键,如果是简单类型的值(数字、字符串、布尔值),值严格相等就将被视为一个键,undefined和null不同,NaN是同一个
  • 实例属性和操作方法
    • size
    • set(key,value)
    • get(key)
    • has(key)
    • delete(key)
    • clear()
  • 遍历方法
    • keys()
    • values()
    • entries()
    • forEach()
  • Map与其他数据类型的转换
    • Map转为数组...
    • 数组转Map,传入构造函数
    • Map转为对象,如果所有键是字符串
      function strMapToObj(strMap) {
          let obj = Object.create(null);
          for (let [k,v] of strMap) {
              obj[k] = v;
          }
          return obj;
      }
      
    • 对象转为Map
      function objToStrMap(obj) {
          let strMap = new Map();
          for (let k of Object.keys(obj)) {
              strMap.set(k, obj[k]);
          }
          return strMap;
      }
      
    • Map转JSON,map键名都是字符串:先转换为对象,否则转为数组JSON
    • JSON转Map,json转为对象,在转map,如果json是一个数组,直接传入Map构造函数。

weakMap

  • weakMap只接受对象作为键名,不接受其他类型的值作为键名
  • weakMap键名所指的对象,不计入垃圾回收机制
  • 键名所引用的对象都是弱引用,即垃圾回收机制不将该引用考虑在内
  • 应用创景:DOM 元素上添加数据,就可以使用WeakMap结构。当该 DOM 元素被清除,其所对应的WeakMap记录就会自动被移除
  • 两个区别:没有便利擦欧总,没有size
posted @ 2018-01-29 12:36  前端路上不断前进的小白  阅读(481)  评论(0)    收藏  举报