扩展(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 目录 一.算数运算符 + = * / % // ** 二.比较运算 > < == != >= ...
随机推荐
- 基本算法思想之穷举法(C++语言描述)
穷举算法(Exhaustive Attack method)是最简单的一种算法,其依赖于计算机的强大计算能力来穷尽每一种可能性,从而达到求解问题的目的.穷举算法效率不高,但是适应于一些没有规律可循的场 ...
- Java引用的四种状态
强引用 用的最广,我们平时写代码时,new一个Object存放在堆内存,然后用一个引用指向它.它就是强引用. 如果一个对象具有强引用,那么垃圾回收期绝不会回收它,当内存空间不足,java虚拟机宁愿抛出 ...
- C#中索引器Indexer的学习使用
索引器 顾名思义,是用来索引的,那么C#中索引器是用来索引什么的呢 首先我们知道,C#中的数组是本身就可以索引的,那么C#中的类和结构呢,类和结构的实例是无法索引的,如果我们想让C#中类或者结构的实例 ...
- POJ 3691 DNA repair (DP+字符串)
题意:给出nn(1≤n≤50,1≤n≤50) 个病毒DNA序列,长度均不超过20.现在给出一个长度不超过1000的字符串,求至少要更换多少个字符, 才能使这个字符串不包含这些DNA序列. 析:利用前缀 ...
- ERROR: JDWP Unable to get JNI 1.2 environment的解决方法
当执行如下代码时: //从控制台获取输入 InputStream is = System.in; Scanner scanner = new Scanner(is); System.out.print ...
- 介绍两款常用的“图表统计图"的插件
一.相信朋友们在开发的过程中都会使用到“数据统计”的功能,图表的统计更为直观,在这里就介绍两款插件:fusionChart.DataVisualization. 1.fusionChart实际项目中用 ...
- Jquery常用标签
$(this).hide(1000)//隐藏该元素 $(this).show(1000)//显示该元素 $(this).fadeIn(1000)//淡入已隐藏的元素 $(this).fadeOut(1 ...
- CSS 框模型概述
在 CSS 中,width 和 height 指的是内容区域的宽度和高度. 增加内边距.边框和外边距不会影响内容区域的尺寸,但是会增加元素框的总尺寸. 假设框的每个边上有 10 个像素的外边距和 5 ...
- laravel 常见操作
1.url()
- Educational Codeforces Round 52F(树形DP,VECTOR)
#include<bits/stdc++.h>using namespace std;int n,k;vector<int>son[1000007];int dp[100000 ...