JS -- (17) 集合引用类型【一些子区别】

63 阅读2分钟

【集合引用类型】

  • Object
  • Array
  • Map
  • WeakMap
  • Set
  • WeakSet
<1> Map 和 Object 的区别
MapObject
意外的键Map默认情况不包含任何键,只包含显式插入的键Object有一个原型,原型链上的键名有可能和自己在对象上的设置的键名产生冲突。
键的类型Map默认情况不包含任何键,只包含显式插入的键。Object 的键必须是String或是Symbol。
键的顺序以插入的顺序返回键值。Object的键是无序的
sizeMap 的键值对个数可以轻易地通过size属性获取Object的键值对个数只能手动计算
迭代可以直接使用 forEach 进行迭代必须借助迭代器取出键集合or值集合or键值对集合
性能在频繁增删键值对的场景下表现更好。在频繁添加和删除键值对的场景下未作出优化。
<2> Map 和 WeakMap 的区别

Map 本质上是键值对的集合,且 Map 的键不限制范围,可以是任何类型。 WeakMap 本质上也是键值对的集合,但 WeakMap 的键必须是对象,且其键是弱引用的!!

区别:

  • 键的类型

     - Map 的键可以是任意类型
     - WeakMap 的键必须是对象类型
    
  • 能否迭代

     - Map 可以进行迭代,且原生支持三种迭代器and一种迭代方法(forEach())
     - WeakMap 是不能进行迭代的!!!
    
  • 当键是引用类型时,键的引用方法:

     - Map 是强引用,即确确实实是对该对象的引用,确确实实是往这个对象身上放东西了!!所以会影响垃圾回收机制对该对象的回收!!
     - ```
     - let obj1 = {a:3};
         map1 = {
              obj1 : 2,
              a : 3
         }
     - ```
     - WeakMap 是弱引用,即并没有真真实实的引用该对象,所以如果该对象没有其他的引用,垃圾回收机制就会回收它!!
    
  • 方法

2159.png

2160.png