ES2015之Map + WeakMap

349 阅读2分钟

这是我参与11月更文挑战的第12天,活动详情查看:2021最后一次更文挑战

Set + WeakSet

ES2015的标准增加了:Map + WeakMap,这篇文章我们就来了解一下什么是Map + WeakMap

Map

Map 对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值) 都可以作为一个键或一个值。

常用方法

我们在创建map对象后,可以使用相应的方法:

let myMap = new Map();

set 我们可以使用set方法添加键,使用如下:

let myMap = new Map();
myMap.set('name', '也笑')
myMap.set('height', '183cm')
console.log(myMap); // Map(2) { 'name' => '也笑', 'height' => '183cm' }

size 我们可以使用map对象的size属性来看它的长度,使用如下:

console.log(myMap.size); // 2

get 我们可以使用map方法来读取键值,使用如下:

console.log(myMap.get('name')); // 也笑

使用场景

我们可以利用Map对象来处理二位数组,更方便的去读取值,使用如下:

let myMap = new Map([['name','也笑'],['age',812]]);

console.log(myMap.get('name')); // 也笑

注意事项

NaN 也可以作为Map对象的键。虽然 NaN 和任何值甚至和自己都不相等(NaN !== NaN 返回true),但我们这样使用:

myMap.set(NaN, "任意值");

myMap.get(NaN); // "任意值"

WeakSet

WeakMap 对象是一组键/值对的集合,其中的键是弱引用的。其键必须是对象,而值可以是任意的,使用如下:

let myMap = new WeakMap();
const obj={}
myMap.set(obj, '也笑') //键必须是对象,否则报错
console.log(myMap); // WeakMap { <items unknown> }
console.log(myMap.get(obj)); // 也笑

总结

在获取Map对象值的时候,我们是要根据get(键)方法获取,需要注意的:

  1. 当键为NaN的时候,我们在校验Map对象有键NaN是直接判定他们两个是相等的(虽然 NaN !== NaN)。
  2. 当键不是NaN的时候,我们在检验Map对象的键是用恒等 === 运算符的结果来判断,例如:myMap.get(1)myMap.get('1')获取的不是同一键所对应的值。

如果你想了解ES的其他特性,请移步到 ES2015+碎片化学习,每天都在向前走一步,这是所有文章的目录入口。