扩展(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 目录 一.算数运算符 + = * / % // ** 二.比较运算 > < == != >= ...
随机推荐
- sell02 展现层编写
# API ###商品列表 ``` GET /sell/buyer/product/list ``` 参数 ``` 无 ``` 返回 ``` { "code": 0, " ...
- idea中java项目增加module后,增加的目录(src)无法增加包(Package)
在idea项目中,增肌model后,在项目根目录下增加src目录,右键发现无法增加包(Package). 仔细观察发现,新增加的src目录是棕色,而原先的src目录是浅蓝色的,见下图: 在src右键, ...
- POJ 1601 拓展欧几里得算法
学习链接:http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html 先来学习一下什么是欧几里得算法: 欧几里得原理是:两个整数 ...
- Tensorflow函数——tf.placeholder()函数
tf.placeholder()函数 Tensorflow中的palceholder,中文翻译为占位符,什么意思呢? 在Tensoflow2.0以前,还是静态图的设计思想,整个设计理念是计算流图,在编 ...
- 【leetcode 968. 监控二叉树】解题报告
解题思路: 由于叶子节点一定不要安装监视器,这样才能使总监视器数量比较少,因此需要从下往上进行判断当前节点的状态(共:3种状态): 0: 当前节点安装了监视器 1: 当前节点可观,但没有安装监视器 2 ...
- PAT1060【大模拟啊】
怎么麻烦怎么来了??? 提供几个案例: 5 0.00001 0.00001 0 0.0 0.0222 1 0.001 0.2000 2 005.06 0.230 1 00.020 0 贴份代码跑.. ...
- Codeforces Beta Round #71 C【KMP+DP】
Codeforces79C 题意: 求s串的最大子串不包含任意b串: 思路: dp[i]为以i为起点的子串的最长延长距离. 我们可以想到一种情况就是这个 i 是某个子串的起点,子串的长度-1就是最短, ...
- git 修改远程仓库源
自己已经写好了一个项目,想上传到 github github 创建新项目 新建 README.md , LICENSE 本地项目添加 github 远程仓库源 不是git项目 git remote a ...
- sqoop 安装与命令
1. 下载: wget http://mirrors.shu.edu.cn/apache/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz 2. 解 ...
- 解读人:李思奇,Development of a sensitive, scalable method for spatial, cell-type-resolved proteomics of the human brain. (一种用于研究人类大脑基于空间或细胞类型的蛋白质组学的灵敏方法)
发表时间:(2019年4月) 一. 概述: 本文报道了一种可研究人类大脑组织中特定神经细胞的蛋白质组学的方法.作者通过激光捕获显微切割技术(LCM)从逝者大脑中分离出目的神经元细胞,接着尝试了一系列不 ...