const m = new Map();
m.set(1,'1').set('name','Tom');
const mark = Symbol('age');
m.set(mark,19);
const obj = {other:'play'};
m.set(obj,'basketball');
console.log(m);
读取
get(key) 方法读取 key 对应的值,如果找不到 key ,返回 undefined 。
const m = new Map([
['name','Tom'],
]);
const mark = Symbol('age');
m.set(mark,19);
console.log(m.get('name'));
console.log(m.get(mark));
删除
delete(key) 方法删除键 key ,删除成功则返回 true ,否则返回 false 。
const m = new Map([
['name','Tom'],
]);
const result = m.delete('name');
console.log(result) // true
console.log(m.delete('age')) // false
其它
has(key) : 判断是否有键 key 。
clear() : 清除所有成员。
遍历
遍历的常用方法有: forEach ,for-of :
const m = new Map([
['name','Tom'],
[1,'1'],
[Symbol('age'),19],
[{other:'play'},'basketball'],
]);
for (const ele of m.keys()) {
console.log(ele);
}
// name
// 1
// Symbol(age)
// {other: "play"}
目录
引子
“键值对”的数据结构,之前基本上都是使用
{}
,新的规范中有更合适的选择了。上一篇 JavaScript 新旧替换五:函数嵌套。
ES5 方式
基本用法
使用
{}
存储键值对,键的类型只支持两种:String
和Symbol
。结果
![78-object-base][url-local-1] 上面的 `obj1` 的键名虽然是一个数字,但会被转换为字符串。操作
添加/修改
添加和修改使用
.
或[]
的方式:对于
Symbol
类型的键值,必须要用[]
的方式才行。读取
跟添加类似使用
.
或[]
的方式:删除
删除使用
delete
操作符:遍历
遍历的常用方法有:
for-in
,for-of
:这种数据结构的键是无序的,此外,键如果是
Symbol
类型,无法被遍历。ES2015+ 方式
为了解决上述键类型的问题,ES2015+ 中提供了 Map 数据结构。Map 结构提供了“值-值”的对应,更加适合存储“键值对”。
基本用法
结果
![78-map-base][url-local-2]Map 数据结构基本属性
size
是成员的总数。操作
添加/修改
set(key, value)
方法设置键key
对应的值为value
,并返回整个 Map 结构,因此可以链式调用。如果key
已经存在,则键值会被更新。读取
get(key)
方法读取key
对应的值,如果找不到key
,返回undefined
。删除
delete(key)
方法删除键key
,删除成功则返回true
,否则返回false
。其它
has(key)
: 判断是否有键key
。clear()
: 清除所有成员。遍历
遍历的常用方法有:
forEach
,for-of
:键名是有序的,
Symbol
类型的键也可以遍历到。区别
参考资料
:wastebasket:
逆向思维。 ![78-poster][url-local-poster]