# Map 数据结构
> 对象本质上是键值对的集合。但是只能使用字符串充当键;
> map 结构与对象类似,也是键值对集合,但是”键”的范围不限于字符串,对象也可以当作键。
```javascript
let m = new Map()
let o = {
p: 'hello ES6!'
}
m.set(o, 'context') //这里 o 作为 m的一个键
console.log(m.get(o)) //context
//Map函数可接收一个数组进行初始化。
let map = new Map([['name', 'clouds'], ['age', 18]])
console.log(map.size) // 2
console.log(map.has('name')) // true
console.log(map.get('name')) // clouds
console.log(map.has('age')) // true
```
**注意:只有针对同一个对象的引用,Map 结构才将其视作同一个键。这一点要非常小心才行。**
```javascript
var map = new Map()
map.set(['a'], 555)
map.get(['a']) // undefined
/* 在这里set和get方法表面上是针对同一个键,但实际上这是两个值,内存地址是不一样的,因此get方法无法读取该键,返回undefined。*/
```
>Map结构有以下属性和方法:
- size : 返回成员总数。
- set(key, value) : 设置一个键值对。
- get(key) : 读取一个键。
- has(key) : 返回一个布尔值,表示某个键是否在Map结构中。
- delete(key) : 删除某个键。
- clear() : 清除所有成员。
```javascript
let m = new Map()
m.set('clouds','yes')
m.set(998,'带回家')
m.set(undefined,'node')
let hello = _ => 'hello es6!'
m.set(hello,'i,m hello')
m.has('clouds')
m.has('memeda')
m.has(undefined)
m.has(998)
m.delete(undefined)
m.has(undefined)
console.log(m.size) //3
console.log(m.undefined) //undefined
console.log(m.get(hello)) // i,m hello
m.clear()
console.log(m.size) // 0
```
> 遍历,返回值均为数组
- key() : 返回键名的遍历器。
- values() : 返回键值的遍历器。
- entries() : 返回所有成员的遍历器。
除此之外还有一个与数组相同的forEach方法。
- 01.let-const
- 02.对象数组解构&赋值
- 03.字符串扩展,数值扩展,数组扩展
- 04.数组扩展
- 05.对象扩展
- 06.06.Symbol原始数据类型
- 07.set数据结构
- 08.map数据结构
- 09.proxy与Reflect
- 10.类
- 11.Promise
- 12.Iterator(迭代器)
- 13.Generator(生成器)
- 14.module与模块化
- 15.es6学习总结
- 记录- Vue拖拽实例
- 记录-git使用天坑之分支切换
- node -- session & cookie & localStorge
- 18.12关于前端战略技术储备与问题反馈
- Vue组件通信方式总结以及遇到的问题
- 01.版本回溯以及文件修改
- 02.远端控制
- 03.分支管理
- node 入门 留言板
- nodejs模块与 commonjs 规范
- 19年技术发展规划
- JS错误处理 -> 提升程序健壮性
- Git 基本使用
- 18年年终总结