【集合引用类型】
- Object
- Array
- Map
- WeakMap
- Set
- WeakSet
<1> Map 和 Object 的区别
| Map | Object | |
|---|---|---|
| 意外的键 | Map默认情况不包含任何键,只包含显式插入的键 | Object有一个原型,原型链上的键名有可能和自己在对象上的设置的键名产生冲突。 |
| 键的类型 | Map默认情况不包含任何键,只包含显式插入的键。 | Object 的键必须是String或是Symbol。 |
| 键的顺序 | 以插入的顺序返回键值。 | Object的键是无序的 |
| size | Map 的键值对个数可以轻易地通过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 是弱引用,即并没有真真实实的引用该对象,所以如果该对象没有其他的引用,垃圾回收机制就会回收它!! -
方法