一、扩展运算符(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)运算符的更多相关文章

  1. ...:ES6中扩展运算符(spread)和剩余运算符(rest)详解

    1.扩展运算符(spread) demo1:传递数据代替多个字符串的形式 let test= function(a,b,c){ console.log(a); console.log(b); cons ...

  2. vs写python扩展资料收集

    总结: 1.创建dll工程: 2.增加包含头文件路径 :将python路径下的include加入到包含头文件路径:在工程属性页 C/C++/附加包含目新增<Python>\include目 ...

  3. OpenLayers 3 扩展插件收集

    OpenLayers 3 扩展插件 Awesome-OpenLayers OL3扩展 ol3-ext 很酷的一组 OpenLayers 3 (ol3) 扩展: 编辑-选择控件.CSS popup(弹出 ...

  4. SQLdiag-配置文件-扩展

    CustomDiagnostics在我们第一次双击D:\Program Files\Microsoft SQL Server\100\Tools\Binn目录下的SQLdiag.exe应用程序所收集的 ...

  5. C++的运算符

    C++的运算符十分丰富,使得C++的运算十分灵活方便.例如把赋值号(=)也作为运算符处理,这样,a=b=c=4就是合法的表达式,这是与其他语言不同的.C++提供了以下运算符: 算术运算符+(加)  - ...

  6. SQLServer中使用扩展事件获取Session级别的等待信息以及SQLServer 2016中Session级别等待信息的增强

    本文出处:http://www.cnblogs.com/wy123/p/6835939.html 什么是等待 简单说明一下什么是等待:当应用程序对SQL Server发起一个Session请求的时候, ...

  7. 通过四个例子理解JavaScript拓展运算符

    原文地址:JavaScript & The spread operator 拓展运算符看起来像什么? 三个点,... 它能做什么? 拓展运算符允许一个表达式在某个地方展开成为多个元素.变量或参 ...

  8. SQL Server 扩展事件(Extented Events)从入门到进阶(3)——通过界面操作Extented Event

    本文属于 SQL Server扩展事件(Extended Events)从入门到进阶 系列 对于接纳扩展事件,其中一个最大的障碍就是要对XML和XQuery有一定的了解以便分析数据.我们可以使用T-S ...

  9. day02 运算符

                                  运算符2019-04-01 目录 一.算数运算符 + = * / % // ** 二.比较运算 > < == != >= ...

随机推荐

  1. nodejs assert 模块

    assert模块是Node的内置模块,主要用于断定.如果表达式不符合预期,就抛出一个错误.该模块提供11个方法,但只有少数几个是常用的. 1.assert() assert(value[, messa ...

  2. 转:Linux下用Jmeter做接口测试

    本地设计 首先在本地设计 Apache JMeter 测试计划,大家可以参考<接口测试之 JMeter 初探> ,这里不再重复. 服务器配置 确保服务器已经安装了JDK和Python. 在 ...

  3. 11.Weblogic-SSRF漏洞复现

    应为这一阵正好在学习SSRF漏洞,又苦于本人太菜没有挖到SSRF,只能复现... 先贴出很早之前央视网SSRF可窥探内网(Weblogic SSRF案例):https://www.secpulse.c ...

  4. 实验楼Linux基础入门第一周

    &&使用oschina的git服务器 1.创建了项目 https://git.oschina.net/abc99/wyq20169314 2.配置项目 (1)为项目添加公钥 项目管理- ...

  5. jquery事件之事件委托和事件切换

    一.事件委托函数: 方法名 说明 语法 (events 事件类型,data数据,handler 事件处理函数,selector 选择器) live 用于为指定元素的一个或多个事件绑定事件处理函数. j ...

  6. Redis源码分析-底层数据结构盘点

    前段时间翻看了Redis的源代码(C语言版本,Git地址:https://github.com/antirez/redis), 过了一遍Redis数据结构,包括SDS.ADList.dict.ints ...

  7. 商派OMS增加PMC跟生产中心角色权限思路

    一.目标:根据现有的商派OMS框架逻辑二开 PMC中(外协单位.生产中心)角色权限(如:下图的仓库角色,根据[接单元.发货员.仓库管理员],选择一或多的版权仓库,同理,如外协单位根据[**.** .* ...

  8. CDN working principle diagram

    转自 https://cloud.tencent.com/developer/article/1358553

  9. Java Web之文件的上传及下载

    一.文件的上传 1. 简介 > 将一个客户端的本地的文件发送到服务器中保存. > 上传文件是通过流的形式将文件发送给服务器. 2.表单的设置 1.向服务器上传一个文件时,表单要使用post ...

  10. 视图、存储函数、存储过程、触发器:MySQL系列之五

    一.视图 视图:VIEW,虚表,保存有实表的查询结果,实际数据不保存在磁盘 物化视图:实际数据在磁盘中有保存,加快访问,MySQL不支持物化视图 基表:视图依赖的表 视图中的数据事实上存储于" ...