2020-02-22 Set & WeakSet & Map &WeakMap

Set & WeakSet

类似于数组, 成员唯一且无序, 没有重复值

  1. set.add(val)

    • 向set中添加值的时候, 不会发生类型转换, 使用精确相等===, 区别是NaN等于自身无法重复添加
  2. WeakSet 对象允许将弱引用对象存储在集合中, 与Set的区别

    • WeakSet只能存储对象引用, 不能存放值, 而Set对象可以
    • WeakSet中存储的对象值, 垃圾回收机制不会考虑WeakSet对该值的引用, 如果该对象没有被其他变量或者属性引用, 那么该对象就会被垃圾回收机制回收掉, 此时WeakSet中也会没有该对象, 所以WeakSet中有多少个成员格式可能不一致, 取决于垃圾回收机制有没有运行, 运行前后的成员个数可能不一致
    • 基于上述, WeakSet不能获取size和不能遍历, 同时clear()方法也废弃了
    var ws = new WeakSet();
    var obj = { o: '1' };
    var foo = { bar: 1 };
    
    ws.add(window);
    window.obj = obj;
    
    ws.add(obj);
    
    ws.has(window); // true
    ws.has(foo);   // 因为没有被用到, 被垃圾回收机制回收了, false
    ws.has(obj);   // 被window引用了, 没有被垃圾回收, true
    
    ws.delete(window); // true
    ws.has(window);    // false
    

Map & HashMap

  1. map与set的区别

    • 共同点:
      • set, Map可以存储不重复的值
      • 都可以遍历, 有iterator接口
    • 不同点:
      • set是以[value1, value2] 的形式存储, map是以 [[key,value]]的形式存储
  2. WeakMap

    • WeakMap实例是一组键值对的集合, 键是弱引用对象, 而值可以是任意, WeakMap弱引用的只是键名key, 而不是键值
    • 键名是弱引用对象, 所以WeakMap同样不能遍历
  3. Object与Map

    • 对象的键值类型只能是字符串, 而Map则提供了任意类型的键值对应关系

你可能感兴趣的:(2020-02-22 Set & WeakSet & Map &WeakMap)