JavaScript对象本质上是键值对的集合,但是只能用字符串作为键。针对这个问题,es6提出了Map数据结构。
Map类似于对象,但是“键”的范围不限于字符串,各种类型的值都可以当做键。
Object提供的是‘字符串--值’;
Map提供的是‘值--值’;
对于‘键值对的数据结构’,Map比Object更加合适。
对象作为键
Map可以接受的参数
1、数组可以作为Map的参数。
2、任何具有Interator接口,且每个成员都是一个双元素数组的数据结构。都可以作为Map的参数。
3、Map中获取一个不存在的值,会返回undefined
Map的键
Map的键实际上是和内存地址绑定的,只要内存地址不同,就可以视为两个键。我们扩展别人的库时,如果使用对象作为键名,不用担心自己的属性与原作者的属性同名。
Map的键是复杂类型(即使长得像,也没有指向同一块内存)
Map的键是简单类型
【1】为数字时
+0和-0代表相同
【2】为字符创和布尔类型时
true和‘true’是不同的。
实例属性和操作方法
属性:
size属性 返回Map结构的成员总数
操作方法
set(key,value) 设置key所对应的键值(采用链式写法)
get(key) 根据key读取对应键值
has(key) 某个键是否在Map数据结构中
delete(key) 删除某键
clear() 清除所有成员
遍历方法
1、keys() 返回键名的遍历器
2、values() 返回键值的遍历器
3、entries() 返回键值对的遍历器
4、forEach() 遍历Map的所有成员。
Map与其他数据结构的转换
1、Map转为数组
最方便的方法是使用扩展运算符(...)
2、数组转为Map 注意:如果不是[[]]会出错
3、Map转为对象
Map转为对象的前提是:Map的所有键都是字符串,才可以转为对象。
4、对象转为Map
5、Map转为JSON
【1】Map键名是字符串,可以选择转为对象JSON。(先转为对象,在转为json)
【2】Map键名有非字符串,可以选择转为数组JSON。
6、JSON转为Map
【1】所有键名都是字符串(先将对象转为Map)
【2】整个JSON就是一个数组
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。