# 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年年終總結