拂过红尘衣袂,涤荡污浊俗心。 愿纵马而歌归故里,能得你素衣不改,白裙曳地,夹道相迎。
Map
- Map 本身是一个构造函数,用来生成 Map 数据结构,Map数据结构 类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。
- Map 也可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。
1 | const items = [ |
Map 实例的属性
- Map.prototype.constructor:构造函数,默认就是 Map 函数。
- Map.prototype.size:返回 Map 实例的成员总数。
1 | const map = new Map([[{name:'小华'},'爱吃糖']]); |
Map 实例的方法
- Map.prototype.set(key, value)
- set方法设置键名key对应的键值为value,然后返回整个 Map 结构。如果key已经有值,则键值会被更新,否则就新生成该键。
- Map.prototype.get(key)
- get方法读取key对应的键值,如果找不到key,返回undefined。
- Map.prototype.has(key)
- has方法返回一个布尔值,表示某个键是否在当前 Map 对象之中。
- Map.prototype.delete(key)
- delete方法删除某个键,返回true。如果删除失败,返回false。
- Map.prototype.clear()
- clear方法清除所有成员,没有返回值。
1 | const map = new Map([[{name:'小华'},'爱吃糖']]); |
Map 遍历
- Map.prototype.keys()
- 返回键名的遍历器
- Map.prototype.values()
- 返回键值的遍历器
- Map.prototype.entries()
- 返回所有成员的遍历器
- Map.prototype.forEach():
- 遍历 Map 的所有成员
1 | const map = new Map([[{name:'小华'},'爱吃糖'],[undefined,'我是undefined'],[1,'我是值']]); |
改变 Map 结构
1.Map 转数组
1 | const map = new Map([[{name:'小华'},'爱吃糖'],[undefined,'我是undefined'],[1,'我是值']]); |
- Map 转对象
1 | function strMapToObj(strMap) { |
3.对象转 Map
1 | let obj = {"a":1, "b":2}; |
WeakMap 和 Map 区别
- WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名。
- WeakMap的键名所指向的对象,不计入垃圾回收机制。它的键名所引用的对象都是弱引用,即垃圾回收机制不将该引用考虑在内。因此,只要所引用的对象的其他引用都被清除,垃圾回收机制就会释放该对象所占用的内存。也就是说,一旦不再需要,WeakMap 里面的键名对象和所对应的键值对会自动消失,不用手动删除引用。