Map
- 能够保存键值对,并且能够记住键的原始插入顺序,任何值(函数、对象、基本类型)都可以作为一个键或者一个值
- 键值NaN与NaN相等,使用===运算符判断是否相等
- 可以直接通过size属性获取键值对个数
- 键值对有序
- 可直接被迭代
- 频繁增删键值对,性能更好
- 与Object对比:
- Object是无序的
- Object具有原型,原型链上的键名可能与定义的冲突
- Object键值必须是一个String或者Symbol
- 个数需要手动计算
- 将
Object转换为Map
- 用法:
const map = new Map();
map.set('a',1);
map.set('b',2);
map.delete('c')
map.keys()
map.values()
console.log(map,map.get('a'),map.size);
- 迭代方式
const map = new Map();
map.set('a',1);
map.set('b',2);
for( const [key,value] of map){
console.log(key,value);
}
const map = new Map();
map.set('a',1);
map.set('b',2);
map.forEach((value,key)=>{
console.log(key,value)
})
- 使用场景:
Set
- 可存储唯一值(键),存储类型(原始值、对象引用)
NaN 之间被视为相同的值(NaN 被认为是相同的,尽管 NaN !== NaN)
- 用法:
const set = new Set();
set.add(1);
set.add(2);
set.delete(1);
set.has(2);
set.keys();
set.values();
console.log( set,set.size,set.has(2))
- 迭代方式
const set = new Set();
set.add(1);
set.add(2);
set.forEach((key) => {
console.log( key)
});
- 使用场景
- 数组去重
let arr =[1,1,1,1,2];
console.log([...new Set(arr)]);
