# ES6-...（spreed&rest）运算符

### …运算符的作用

`简化书写长度，提升开发效率`

### …运算符分类：读和写，ES6和ES7

• 读的场景 var arg = [1,2,3]; console.log(…arg); -展开作用
• 写的场景 function test (…arg){}; test(1,2,3)；-收集作用
• ES6 主要作用在数组上
• ES7 主要作用在对象上

### ES6中写的场景

```	function average(){
var averageNumber = 0;
//将arguments转化为数组
var arr = [].slice.call(arguments);
//数组按照从小到大排序
arr.sort(function(a, b){
return a - b;
});
arr.pop();
arr.shift();
for(var i = 0; i < arr.length; i++){
averageNumber += arr[i];
}
return averageNumber /= arr.length;
}```

```	function average(...arg){
var averageNumber = 0;
//数组按照从小到大排序
arg.sort(function(a, b){
return a - b;
});
//去掉第一个和最后一个
arg.pop();
arg.shift();
for(var i = 0; i < arg.length; i++){
averageNumber += arg[i];
}
return averageNumber /= arg.length;
}
console.log(average(3, 1, 4, 2));//2.5```

• 将参数收集起来，收集方式为将参数放入数组存入arg中，所以，下面才可以直接调用数组的方法

```	function print(a, b, ...arg){
console.log(a, b, arg);
}
print('a', 'b', 1, 2, 3);```

rest运算符前面是可以放指定参数的，并且不会被收集到数组当中

```		function print(a, b, ...arg, d){
console.log(a, b, arg);
}
print('a', 'b', 1, 2, 3,'d');```

### ES6中读的操作（spreed）

```	let arr = [1, 2, 3, 4, 5];
console.log(arr); //毫无疑问此处应该打印[1, 2, 3, 4, 5];
console.log(...arr);//但是再spreed运算符后，会变成散列的值： 1, 2, 3, 4, 5```

```	let arr1 = [1, 2, 3, 4];
let arr2 = [5, 6, 7, 8];
let arr3 = [...arr1, ...arr2];
console.log(arr3);//[1, 2, 3, 4, 5, 6, 7, 8]```

```	function getComputed(...arg){
arg.sort(function(a, b){
return a - b;
});
arg.shift();
arg.prp();
//采用spreed，将数组转成了散列的值
return getSum(...arg);
}
//采用了rest运算符，将散列的值收到数组当中
function getSum(...arg){
let sum = 0;
for(let i = 0; i < arg.length; i++){
sum += arg[i];
}
return sum;
}```

### ES7 …运算符对于对象的处理

• 浅层克隆
```	let company = {
name: 'xinhangdao',
age: 15
}
let department = {
name: 'zhangsan',
age: '18'
}
age:  20
}
let obj = {
...company,
...department
}
console.log(obj);

```	let company = {
name: 'xinhangdao',
age: 15
}
name: 'cg',
age: '18'
}
let department = {
age:  20
}
let obj = {
...company,
...department,
}
}
console.log(obj);

```	let obj = {
name: 'zhangsan',
age: 18
}
let obj1 = JSON.parse(JSON.stringify(obj))```

0 条评论

• ### 【redis】03-redis内存淘汰策略及如何配置

当海量数据涌入redis，导致redis装不下了咋办，我们需要根据redis的内存淘汰策略，淘汰一些不那么重要的key，来满足大量数据的存入。

• ### osi七层网络模型及网络基础知识

传输层实现端到端的通信，因此，每一个传输层连接有两个端点。传输层连接的端点叫做套接字（socket）。如果IP地址是210.37.145.1，而端口号是23，那...

• ### CVE-2020-29436：Nexus3 XML外部实体注入复现

Nexus Repository Manager 3是一款通用的软件包仓库管理（Universal Repository Manager）服务。

• ### Linux 查看本机串口方法

可以对串口发送数据比如对com1口，echo /dev/ttyS0 2、查看串口名称使用

• ### [Linux]Linux下安装和配置solr/tomcat/IK分词器 详细实例二.

为了更好的排版, 所以将IK分词器的安装重启了一篇博文,  大家可以接上solr的安装一同查看. [Linux]Linux下安装和配置solr/tomcat/I...

• ### 纸壳CMS的插件加载机制

纸壳CMS是基于插件化设计的，可以通过扩展插件来实现不同的功能。如何通过插件来扩展，可以参考这篇文章：

• ### 双臂的运动规划（一）

与单臂机器人相比，双臂机器人的运动学系统具有其固有的协调特性，动力学系统是一个高纬度、高耦合的非线性系统。目前针对双臂间的协调运动规划主要基于主从式运动规划和非...

• ### 运用Atrous XCRF解决点云分类中的过拟合问题 （CS）

点云数据智能分类技术的进步为许多新的和现有的应用带来了许多新方法与机遇。但是，由于标记点的数量有限，通过机器学习模型进行的自动分类容易过度拟合和模型泛化能力差的...