JavaScript的对象(
object
),本质是上键值对的集合,但是传统上只能用字符串当做键值对。
为了解决这个问题,ES6提供了map数据结构。它的私语对象,也是键值对的集合。但是这个键的范围不限于字符串,各种类型的值(包括对象)都可以当做键。也就是说object结构提供了(字符串-值)的对应.
ES6中的map类型时一种储存着许多键值对的有序列表,其中的键名和对应的值支持所有数据类型。数字5与字符串‘5’会被判定为两种类型,可以分别作为两种独立的键出现在程序中。
1
、属性:
size
返回map的元素数
2
、基本方法
(
1
)
set()
给map添加数据,返回添加后的map(给已存在的键赋值后会覆盖掉之前的值)
(
2
)
get()
获取某个key的值,返回key对应的值,没有则返回undefined
(
3
)
has()
检测是否存在某个key,返回布尔值有返回true,没有返回false
(
4
)
delete()
删除某个key及其对应的value,返回布尔值,成功删除则为true
(
5
)
clear()
清除所有的值,返回undefined
3
、遍历方式
注意:
map
的遍历顺序就是插入顺序,都是有
MapIterator (Map迭代器)
let map = new Map();
map.set('JacksonWang','123');
map.set('LEO','456');
map.set('Z-','789');
(
1
)
keys()
获取map的所有key
console.log(map.keys())//打印所有的键
/*输出:
[Map Iterator] { 'JacksonWang', 'LEO', 'Z-' }
(
2
)
values()
获取map的所有值
console.log(map.values())//打印所有的值
/*
输出:
[Map Iterator] { '123', '456', '789' }
(3
)
entries()
获取map的所有成员
console.log(map.entries())//以键值对的方式
/*输出:
[Map Entries] {
[ 'JacksonWang', '123' ],
[ 'LEO', '456' ],
[ 'Z-', '789' ]
}
(4) for of 用来循环Map迭代器
不可以遍历对象,会提示对象不是一个迭代器,遍历对象只能使用for in
for of可以遍历数组,里面的变量的值是数组的每一项
(4)
forEach()
遍历map的所有成员
let map = new Map();
map.set('JacksonWang','123');
map.set('LEO','456');
map.set('Z-','789');
for(const [key,value] of map.entries()){
console.log(`${key}:${value}`);
}
/*输出:
JacksonWang:123
LEO:456
Z-:789
*/
科普小知识:不管对象还是数组亦或者Set数据构造函数都有keys()/values()/entries()方法
转为数组练习题:
map结构转为数组解构
let map1 = new Map([
[1,'One'],
[2,'Two'],
[3,'Three']
])
console.log([...map1.keys()]);
console.log(...map1.entries())
console.log([...map1.entries()]);
/*输出:
[ 1, 2, 3 ]
[ 1, 'One' ] [ 2, 'Two' ] [ 3, 'Three' ]
[ [ 1, 'One' ], [ 2, 'Two' ], [ 3, 'Three' ] ]
*/