### 数组的解构赋值
#### 数组解构赋值的基本用法
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]
```