扩展(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 目录 一.算数运算符 + = * / % // ** 二.比较运算 > < == != >= ...
随机推荐
- nodejs assert 模块
assert模块是Node的内置模块,主要用于断定.如果表达式不符合预期,就抛出一个错误.该模块提供11个方法,但只有少数几个是常用的. 1.assert() assert(value[, messa ...
- 转:Linux下用Jmeter做接口测试
本地设计 首先在本地设计 Apache JMeter 测试计划,大家可以参考<接口测试之 JMeter 初探> ,这里不再重复. 服务器配置 确保服务器已经安装了JDK和Python. 在 ...
- 11.Weblogic-SSRF漏洞复现
应为这一阵正好在学习SSRF漏洞,又苦于本人太菜没有挖到SSRF,只能复现... 先贴出很早之前央视网SSRF可窥探内网(Weblogic SSRF案例):https://www.secpulse.c ...
- 实验楼Linux基础入门第一周
&&使用oschina的git服务器 1.创建了项目 https://git.oschina.net/abc99/wyq20169314 2.配置项目 (1)为项目添加公钥 项目管理- ...
- jquery事件之事件委托和事件切换
一.事件委托函数: 方法名 说明 语法 (events 事件类型,data数据,handler 事件处理函数,selector 选择器) live 用于为指定元素的一个或多个事件绑定事件处理函数. j ...
- Redis源码分析-底层数据结构盘点
前段时间翻看了Redis的源代码(C语言版本,Git地址:https://github.com/antirez/redis), 过了一遍Redis数据结构,包括SDS.ADList.dict.ints ...
- 商派OMS增加PMC跟生产中心角色权限思路
一.目标:根据现有的商派OMS框架逻辑二开 PMC中(外协单位.生产中心)角色权限(如:下图的仓库角色,根据[接单元.发货员.仓库管理员],选择一或多的版权仓库,同理,如外协单位根据[**.** .* ...
- CDN working principle diagram
转自 https://cloud.tencent.com/developer/article/1358553
- Java Web之文件的上传及下载
一.文件的上传 1. 简介 > 将一个客户端的本地的文件发送到服务器中保存. > 上传文件是通过流的形式将文件发送给服务器. 2.表单的设置 1.向服务器上传一个文件时,表单要使用post ...
- 视图、存储函数、存储过程、触发器:MySQL系列之五
一.视图 视图:VIEW,虚表,保存有实表的查询结果,实际数据不保存在磁盘 物化视图:实际数据在磁盘中有保存,加快访问,MySQL不支持物化视图 基表:视图依赖的表 视图中的数据事实上存储于" ...