# 解构赋值，你不能不懂！

## 解构赋值

• 我们先看几个小例子
```let [a,b,c] = [1,2,3];
console.log(a,b,c);//1 2 3

let {name,age} = {name:"jack",age:"18"};
console.log(name,age);//jack 18

let {toString,length} = "hello";
console.log(toString === String.prototype.toString,length);//true 5

let [a,b,c,d,e] = "world";
console.log(a,b,c,d,e);//w o r l d

let {shift,length,key} =[1,2,3];
console.log(shift,length,key);//[Function: shift] 3 undefined

function fo([x,y,z]){
console.log(x,y,z);
}
fo([3,4,2]);//3,4,2

function fobj({x,y,z}){
console.log(x,y,z);
}
fobj({z:1,y:4,x:2});//2 4 1

let [x, y, z] = new Set(['a', 'b', 'c']);
console.log(x) // "a"```

• 我们可以嵌套解构
```let [a,[b,{name,age}],d] = [1,[4,{name:1,age:1}],6];
console.log(a,b,d,name,age);//1 4 6 1 1```
• 我们也可以改变解构的变量名
```var {b:x,a:y} = {a:1,b:2};
console.log(x,y);//2 1```
• 解构赋值可以设置默认值
```var [x=1,y=2] = [,0];
console.log(x,y);//1 0

var {x=1,y=2] = {y:0};
console.log(x,y);//1 0```
• 数组解构赋值对于不可迭代实例将报错
```let [val] = 1;
let [val] = false;
let [val] = NaN;
let [val] = undefined;
let [val] = null;
let [val] = {};```
• 数组解构可以跳跃赋值
```//取出数组第三个
var [,,x] = [1,2,4];
console.log(x)//4```
• 数组解构可以截取
```let [,...x] = [1,2,4];
console.log(x)//[ 2, 4 ]```

1、交换变量，是一种很酷的玩法

```var {x:y,y:x} = {x:1,y:2};
console.log(x,y);//2 1

let x=1;let y = 2;
[y,x] = [x,y];
console.log(x,y);//2 1```

2、接受函数返回的多个值

```function test(){
return [1,2,3];
}
let [a,b,c] = test();
console.log(a,b,c);//1 2 3

function test(){
return {x:1,y:2,z:3};
}
let {y,z,x} = test();
console.log(y,z,x);//1 2 3```

3、接受不按顺序的函数参数

```function get({name,age,sex}){
console.log(name,age,sex);
}
get({name:"Topqiang",age:24,sex:1});//Topqiang 24 1
get({age:24,name:"Topqiang",sex:1});//Topqiang 24 1
get({name:"Topqiang",sex:1,age:24});//Topqiang 24 1```

```function get({name="topqiang",age,sex}){
console.log(name,age,sex);
}
get({age:24,sex:1});//Topqiang 24 1```

5、为模块化编程提供优雅的模块引入方式

`const {read,write} = require("fs");`

6、函数的参数列表可以自动装载成数组

```function getarr(...args){
console.log(args);
}
getarr(1,23,4);//[ 1, 23, 4 ]```

。。。还有我没有发现的好处。。。

0 条评论

• ### 思梦PHP-阿里大鱼手机验证码

小伙伴是否做PC网站的时候，是否遇到过注册用户需要使用短信验证的功能呢？或者找回密码，以及验证用户的信息等等功能！今天思梦PHP就为大家带来Th...

• ### 微信企业付款到个人钱包引发的坑之反思~！

企业付款到个人钱包也就是用户在微信公众平台提现可以直接打入提现者微信的钱包！但要满足： 1）企业开通微信支付90天 2）连续30天有交易才能开通此功能 ? 今...

• ### ES6（三）：变量的解构赋值

解构赋值语法是一个Javascript表达式，这使得可以将值从数组或属性从对象提取到不同的变量中，文中主要讲数组的解构赋值、对象的解构赋值、字符串的解构赋值、数...

• ### ES6中的解构赋值

ES6解构：es6允许按照一定模式，从数组和对象中提取值，对变量进行赋值，这被称之为解构。

• ### 【ES6基础】解构赋值（destructuring assignment）

我们经常可以在其他编程语言(如GO语言)中看到多返回值这种特性，因为在很多实际场景中，函数的返回值中，函数的返回值并不只有一个单一的值。ES6之前，并没有可以直...

• ### JavaScript中Array数组的几种方法

涉及到数组的问题，以前基本上我们都是采用for循环的方法来进行遍历，后来在ES5中新增了几种方法来方便我们遍历。这几种方法分别为：forEach(js v1.6...

• ### Python实现HMACSHA1生成加密签名

按key升序，key不为sign，value不为空时，把key和value拼装成x=a&y=b格式，然后使用HmacSHA1算法生成签名。

• ### MongoDB数据库(一)

在爬虫中我们会时常用到mongoDB数据库。mongoDB的优点在于易扩展，高性能，灵活的数据了类型。