### 數組的解構賦值
#### 數組解構賦值的基本用法
ES6允許按照一定模式從數組和對象中提取值,然后對變量進行賦值,這被稱為解構
```js
let [a, b, c] = [1, 2, 3]
```
如果解構不成功,則變量的值為 `undefined`
只要某種數據結構具有 `Iterator` 接口,都可以采用數組形式的解構賦值
#### 默認值
解構賦值允許指定默認值
```js
let [foo = true] = []
foo // true
```
### 對象的解構賦值
解構不僅適用于數組,也可以用于對象
```js
let { foo, bar } = { foo: 'aaa', bar: 'bbb' }
foo // 'aaa'
bar // 'bbb'
```
對象的解構與數組有一個重要的不同,數組的元素是按次序排列的,變量的取值由它的位置決定,而對象沒有次序,變量必須與屬性同名才能取到正確的值。
### 字符串的解構賦值
字符串也可以解構賦值,此時字符串被轉換成一個類似數組的對象
```js
const [a, b, c, d, e] = 'hello'
a // 'h'
b // 'e'
c // 'l'
d // 'l'
e // 'o'
```
### 數值和布爾值的解構賦值
解構賦值時,數值和布爾值都會轉換為對象,如果不能轉換,則報錯。
### 函數參數的解構賦值
```js
function add ([x, y]) {
return x + y
}
add([1, 2]) // 3
```
### 解構賦值的作用
#### 交換變量的值
```js
[x, y] = [y, x]
```
#### 從函數返回多個值
```js
function example () {
return [1, 2, 3]
}
```
#### 函數參數的定義
```js
function f ([x, y, z]) {
// ...
}
```
#### 提取JSON數據
```js
let jsonData = {
id: 42,
status: 'OK',
data: [867, 5000]
}
let { id, status, data: number } = jsonData
// 42, OK, [867, 5000]
```