扩展(spread)/收集(rest)运算符
一、扩展运算符(spread)
场景:使用在数组之前。
作用:将一个数组转为用逗号分隔的参数序列
举例1:数组之前
function foo(x, y, z){
console.log(x, y, z)
}
foo.apply(null, [, , ]) //在ES6之前我们这样使用数组作为函数参数调用。
foo(...[, , ]) //此处...[1, 2, 3]就被展开为用逗号隔开的1, 2, 3参数序列
当运算符"..."用在数组之前时,数组会被转为用逗号分隔的参数序列。
举例2:替代apply()方法
// ES5的 写法
var arr1 = [, , ];
var arr2 = [, , ];
Array.prototype.push.apply(arr1, arr2); //push方法参数不能为数组,ES5需要借助apply()方法实现。 // ES6 的写法
let arr1 = [, , ];
let arr2 = [, , ];
arr1.push(...arr2); //ES6中借助扩展运算符直接将数组转为了参数序列。
举例3:替代数组的concat()方法
let a = [, , ]
let b = [, ...a, ] //此处a数组被展开为2, 3, 4
console.log(b) //结果为[1, 2, 3, 4, 5]
上面的用法基本上替代了concat(..),这里的行为就像[1].concat(a, [5])
注意:扩展运算符后如果是空数组,不会产生任何效果
[...[], ]
// [1]
二、收集运算符(rest)
作用:收集剩余的参数转为一个数组。
场景:在函数参数之前使用。
举例1:函数参数之前
function foo(x, y, ...z){ //z表示把剩余的参数收集到一起组成一个名叫z的数组。
console.log(x, y, z)
}
foo(, , , , ) //x赋值1,y赋值2,z中赋值[3, 4, 5]数组
上例中参数z之前的'...'作为rest使用。
举例2:解构赋值
const [first, ...rest] = [, , , , ]; //此处'...'作为rest收集运算符使用
first //
rest // [2, 3, 4, 5] const [first, ...rest] = [];
first // undefined
rest // [] const [first, ...rest] = ["foo"];
first // "foo"
rest // []
总结:如何判断ES6中的运算符是扩展运算符(spread)还是收集运算符(rest),主要取决于其作用的位置。
1.数组之前,作为扩展运算符使用,将数组转为逗号分隔的参数序列。
2.函数形参中,收集传入的参数为数组。
3.解构赋值中,收集对应的数据为数组。
扩展(spread)/收集(rest)运算符的更多相关文章
- ...:ES6中扩展运算符(spread)和剩余运算符(rest)详解
1.扩展运算符(spread) demo1:传递数据代替多个字符串的形式 let test= function(a,b,c){ console.log(a); console.log(b); cons ...
- vs写python扩展资料收集
总结: 1.创建dll工程: 2.增加包含头文件路径 :将python路径下的include加入到包含头文件路径:在工程属性页 C/C++/附加包含目新增<Python>\include目 ...
- OpenLayers 3 扩展插件收集
OpenLayers 3 扩展插件 Awesome-OpenLayers OL3扩展 ol3-ext 很酷的一组 OpenLayers 3 (ol3) 扩展: 编辑-选择控件.CSS popup(弹出 ...
- SQLdiag-配置文件-扩展
CustomDiagnostics在我们第一次双击D:\Program Files\Microsoft SQL Server\100\Tools\Binn目录下的SQLdiag.exe应用程序所收集的 ...
- C++的运算符
C++的运算符十分丰富,使得C++的运算十分灵活方便.例如把赋值号(=)也作为运算符处理,这样,a=b=c=4就是合法的表达式,这是与其他语言不同的.C++提供了以下运算符: 算术运算符+(加) - ...
- SQLServer中使用扩展事件获取Session级别的等待信息以及SQLServer 2016中Session级别等待信息的增强
本文出处:http://www.cnblogs.com/wy123/p/6835939.html 什么是等待 简单说明一下什么是等待:当应用程序对SQL Server发起一个Session请求的时候, ...
- 通过四个例子理解JavaScript拓展运算符
原文地址:JavaScript & The spread operator 拓展运算符看起来像什么? 三个点,... 它能做什么? 拓展运算符允许一个表达式在某个地方展开成为多个元素.变量或参 ...
- SQL Server 扩展事件(Extented Events)从入门到进阶(3)——通过界面操作Extented Event
本文属于 SQL Server扩展事件(Extended Events)从入门到进阶 系列 对于接纳扩展事件,其中一个最大的障碍就是要对XML和XQuery有一定的了解以便分析数据.我们可以使用T-S ...
- day02 运算符
运算符2019-04-01 目录 一.算数运算符 + = * / % // ** 二.比较运算 > < == != >= ...
随机推荐
- Windchill 预览效果偏向左边
文档预览效果偏左 解决方法: 1.修改worker配置,去掉“fit worksheet to a single page”的勾 2.进行services,重新启动以下服务 3.重启windchill ...
- [codeforces821E]Okabe and El Psy Kongroo
题意:(0,0)走到(k,0),每一部分有一条线段作为上界,求方案数. 解题关键:dp+矩阵快速幂,盗个图,注意ll 关于那条语句为什么不加也可以,因为我的矩阵C,就是因为多传了了len的原因,其他位 ...
- VMware安装Ubuntu时出现Intel VT-X处于禁用状态的情况的处理办法
VMware安装Ubuntu时出现Intel VT-X处于禁用状态的情况的处理办法 VMware安装Ubuntu的出现Intel VT-X处于禁用状态的情况会使已经安装好的Ubuntu虚拟机打不开 ...
- SpringBoot02 Controller的使用、数据库操作、事物管理、修改banner
1 Controller的使用 特点:编程技巧和SpringMVC几乎完全一样 注意:@RestController = @Controller + @ResponseBody 注意:读取路径参数和请 ...
- 7.21实习培训日志-JDBC JSP Servlet
JDBC JSP Servlet 总结 今天早上的考试主要考Java的网络,HttpClient的get,post方法,Socket的文件传输和Xml和Json文件的解析,对于HttpCLient很简 ...
- hdu1052
#include <iostream>#include<algorithm>#include<queue>#include<stack>#include ...
- .NET Core 3.0 可回收程序集加载上下文
一.前世今生 .NET诞生以来,程序集的动态加载和卸载都是一个Hack的技术,之前的NetFx都是使用AppDomain的方式去加载程序集,然而AppDomain并没有提供直接卸载一个程序集的API, ...
- PS2018学习笔记(30-35节)
30-35:万能的钢笔-制图抠图必学-part(1-6) # 本节知识点: 钢笔工具 贝塞尔曲线 绘图方式 光标状态认识 路径 形状 形状工具 矢量蒙版 # 本节段落表: 钢笔工具知识 直线绘制知识 ...
- Spark Checkpoint 概述
有时候,Transformation 的 RDD 非常多或者具体 Transformation 产生的 RDD 本身计算特别复杂和耗时,此时我们必须考虑对计算结果数据进行持久化.与 persist 不 ...
- 洛谷P3116 [USACO15JAN]约会时间Meeting Time
P3116 [USACO15JAN]约会时间Meeting Time 题目描述 Bessie and her sister Elsie want to travel from the barn to ...