# 映射
我們可以把映射看成是對JavaScript Object的一個擴展。在傳統的JavaScript Object中,當我們設置key, value對的時候,key只能是字符串。ES6對這個進行了擴展,形成了新的映射類型,映射類型的key, value對可以是任意對象。
## 映射的初始化
在ES6中,可以通過如下2種對構造函數的調用來創建并初始化一個映射對象
* 不傳參數給構造函數,這將創建一個空的映射
```javascript
var sampleMap = new Map();
console.log(sampleMap.size); //will output 0
```
* 傳一個數組給構造函數,這個傳入的數組的每個元素包含2個值,第一個將作為key, 另外一個作為value
```javascript
var sampleMap = new Map([['key1', 'val1'], ['key2', 'val2']]);
//will output 2, also sampleMap will have key key1 and key2
console.log(sampleMap.size);//will output 2
```
## 對映射對象的操作
和集合對象類似,你可以對映射對象執行如下的操作
* 增加成員,通過```set(key, val)```向映射對象增加成員
* 刪除成員,通過```delete(key)```從映射對象刪除成員
* 測試是否包含,通過```has(key)```測試是否包含某個key
* 獲取成員,通過```get(key)```返回成員
* 清空成員,通過```clear()```操作清空整個映射對象
另外,映射對象和集合對象一樣,當你使用object作為key的時候,是根據key是否指向同樣的內存對象來判斷是否new一個key的。如果2個key的對象指向的是同一個內存對象,那么后面一個set將覆蓋前面一個set的內容。
## 對映射對象的遍歷
對映射對象,你可以使用下面的任意一種方法進行合適的遍歷。
* ```keys()```調用,```keys()```調用將返回映射對象key的集合,接著你就可以使用```for...of```循環遍歷了。
```javascript
'use strict';
var sampleMap = new Map();
sampleMap.set('key1', 'val1');
sampleMap.set('key2', 'val2');
for (let key of sampleMap.keys()){
console.log(key + '---' + sampleMap.get(key));
}
```
* ```values()```調用,```values()```調用返回映射對象value的集合,接著你就可以使用```for...of```循環遍歷了。
```javascript
'use strict';
var sampleMap = new Map();
sampleMap.set('key1', 'val1');
sampleMap.set('key2', 'val2');
for (let val of sampleMap.values()){
console.log(val);
}
```
* ```entries()```調用,```entries()```調用返回映射對象key和value的集合,接著你就可以使用```for...of```循環遍歷了。
```javascript
'use strict';
var sampleMap = new Map();
sampleMap.set('key1', 'val1');
sampleMap.set('key2', 'val2');
for (let item of sampleMap.entries()){
console.log(item[0] + '---' + item[1]);
}
```
*```forEach()```調用
```javascript
'use strict';
var sampleMap = new Map();
sampleMap.set('key1', 'val1');
sampleMap.set('key2', 'val2');
sampleMap.forEach(function(value, key, map){
console.log(key + '---' + value);
});
```
# 弱映射
和弱集合一樣,弱映射的key不被垃圾回收所檢查,當key對應的對象被回收的時候,也自動從弱映射中被刪除。由于這個原因,弱映射和弱集合一樣無法進行遍歷,這能修改。
- Introduction
- Nodejs 4.x新特性
- classes
- typed arrays
- generators
- collections
- Set
- Map
- arrow functions
- block scoping
- template strings
- promises
- symbols
- Koa基礎
- 上下文
- koa-generator
- 安裝
- 創建項目
- 更改視圖模板引擎
- Routes
- HTTP
- Get
- 如何獲取query參數
- 如何獲取params
- Post
- 從post獲取參數
- 標準表單(Post with x-www-form-urlencoded)
- 文件上傳(Post with form-data)
- Post with raw
- 數據庫
- MySQL
- Mongo
- 流程控制
- generator/co
- es6的generator是什么?
- co = generator + promise
- async/await
- promise with bluebird
- 測試
- Mocha
- Supertest
- 部署
- 最佳實踐
- FAQ
- 如何發布本書到git pages
- 如何知道require模塊的用法
- koa中的異常處理