ES6——Map和WeakMap

本文介绍了ES6中的Map和WeakMap数据结构。Map提供了has、set、delete、get等方法,以及size属性来操作键值对,可以通过new关键字创建。WeakMap的键必须是对象,其引用是弱引用,当其他对象不再引用键对象时,键对象会被垃圾回收,适合存储不希望影响垃圾回收的键值对。两者都提供了has、set、delete、get方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ES6 提供了新的数据结构 Map。

它有九个常用方法:

  1. 通过键检查元素是否存在 has(key)
  2. 添加元素 set(key , value)
  3. 通过键移除元素 delete(key)
  4. 通过键获取值 get(key)
  5. 清空Map clear()
  6. 遍历Map元素 forEach(fun)
  7. 返回一个迭代器对象 values()
  8. 返回一个元素是类似 [key, value] 形式的迭代器对象 entries()
  9. 返回一个迭代器对象。它包含按照顺序插入的每个元素的 key 值。keys()

一个常用属性:

  • size 获取Map长度

Map 是一个构造函数,因此创建 Map 的方式就是通过 new 关键字创建。
语法:new Map([iterable]);
Iterable 可以是一个数组或者其他 iterable 对象,其元素为键值对(两个元素的数组,例如: [[ 1, 'one' ],[ 2, 'two' ]])。 每个键值对都会添加到新的 Map。null 会被当做 undefined。

var map = new Map();
map.set('name' , 'XD');
map.set('age' , 23);

console.log(map.size);			//2
map.has('name');				//true
map.has('sex');					//false
map.get('name');				//XD
map.delete('name');				//true
console.log(map.size);			//1
map.delete('sex');				//false
map.clear();
console.log(map.size);	//0

keys() 、values() 和 entries() 都会返回一个迭代器对象,不同的是里面的元素不一样。

var map = new Map([['name', 'XD'], ['age', 23]]);

var inter1 = map.keys();
var inter2 = map.values();
var inter3 = map.entries();

console.log(inter1.next().value);		//"name"
console.log(inter2.next().value);		//"XD"
console.log(inter3.next().value);		// ["name", "XD"]
Map 和 WeakMap

WeakMap 对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的。
WeakMap 也是一个构造函数,因此创建 WeakMap 的方式就是通过 new 关键字创建。
语法:new WeakMap([iterable]);
Iterable 是一个数组(二元数组)或者其他可迭代的且其元素是键值对的对象。每个键值对会被加到新的 WeakMap 里。null 会被当做 undefined。

WeakMap 结构与 Map 类似,也是一组键/值对的集合。但是,它与 Map 有两个区别:

  1. 首先,WeakMap 的键必须是对象,而值可以是任意的。
var weakMap = new WeakMap();

weakMap.set('name' , 'XD');		//报错
var weakMap = new WeakMap();
var obj = {};

weakMap.set(obj , 'XD');		//不报错
  1. WeakMap 中的对象都是弱引用,即垃圾回收机制不考虑 WeakMap 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakMap 之中。

WeakMap 只有四个常用方法:

  1. 通过键检查元素是否存在 has(key)
  2. 添加元素 set(key , value)
  3. 通过键移除元素 delete(key)
  4. 通过键获取值 get(key)
var weakMap = new WeakMap();

var obj1 = {};
var obj2 = {};
weakMap.set(obj1 , 'XD');
weakMap.set(obj2 , 23);

weakMap.has(obj1);				//true
weakMap.get(obj1);				//XD
weakMap.delete(obj1);			//true
weakMap.has(obj1);				//false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值