这是我参与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(键)方法获取,需要注意的:
- 当键为
NaN的时候,我们在校验Map对象有键NaN是直接判定他们两个是相等的(虽然NaN !== NaN)。 - 当键不是
NaN的时候,我们在检验Map对象的键是用恒等===运算符的结果来判断,例如:myMap.get(1)和myMap.get('1')获取的不是同一键所对应的值。
如果你想了解ES的其他特性,请移步到 ES2015+碎片化学习,每天都在向前走一步,这是所有文章的目录入口。