当前位置:首页 > 日记 > 正文

ES6中的rest参数与扩展运算符详解

ES6中的rest参数与扩展运算符详解

前言

本文主要给大家介绍了关于ES6中rest参数与扩展运算符的相关内容,rest参数和扩展运算符都是ES6新增的特性。rest参数的形式为:...变量名;扩展运算符是三个点(...)。下面话不多说了,来一起看看详细的介绍:

rest参数

rest参数用于获取函数的多余参数,这样就不需要使用arguments对象了。rest参数搭配的变量是一个数组,该变量将多余的参数放入数组中。

function add(...values) { let sum = 0; for (var val of values) { sum += val; } return sum;}add(1, 2, 3) // 6

传递给 add 函数的一组参数值,被整合成了数组 values。

下面是一个 rest 参数代替arguments变量的例子。

// arguments变量的写法function sortNumbers() { return Array.prototype.slice.call(arguments).sort();}// rest参数的写法const sortNumbers = (...numbers) => numbers.sort();

rest参数和arguments对象的区别

  • rest参数只包含那些没有对应形参的实参;而 arguments 对象包含了传给函数的所有实参。
  • arguments 对象不是一个真实的数组;而rest参数是真实的 Array 实例,也就是说你能够在它上面直接使用所有的数组方法。
  • arguments 对象对象还有一些附加的属性 (比如callee属性)。

另外,使用rest参数时应注意一下两点:

1、rest 参数之后不能再有其他参数(即只能是最后一个参数),否则会报错。

function f(a, ...b, c) { ... } // 报错

2、函数的length属性,不包括 rest 参数。

(function(a) {}).length // 1(function(...a) {}).length // 0(function(a, ...b) {}).length // 1

扩展运算符

扩展运算符可以看做是 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。

console.log(...[1, 2, 3]) // 1 2 3console.log(1, ...[2, 3, 4], 5) //1 2 3 4 5

扩展运算符的应用

普通的函数调用

function push(array, ...items) { array.push(...items);}function add(x, y) { return x + y;}var numbers = [4, 38];add(...numbers) // 42

上面代码中,array.push(...items)add(...numbers)这两行,都是函数的调用,它们的都使用了扩展运算符。该运算符将一个数组,变为参数序列。

替代 apply 方法调用函数

// ES5 的写法Math.max.apply(null, [14, 3, 77])// ES6 的写法Math.max(...[14, 3, 77])// 等同于Math.max(14, 3, 77);
// ES5 的写法var arr1 = [0, 1, 2];var arr2 = [3, 4, 5];Array.prototype.push.apply(arr1, arr2);// ES6 的写法var arr1 = [0, 1, 2];var arr2 = [3, 4, 5];arr1.push(...arr2);

合并数组

var arr1 = ['a', 'b'];var arr2 = ['c'];var arr3 = ['d', 'e'];// ES5的合并数组arr1.concat(arr2, arr3) // [ 'a', 'b', 'c', 'd', 'e' ]// ES6的合并数组[...arr1, ...arr2, ...arr3] // [ 'a', 'b', 'c', 'd', 'e' ]

与解构赋值结合

const [first, ...rest] = [1, 2, 3, 4, 5];first // 1rest // [2, 3, 4, 5]const [first, ...rest] = [];first // undefinedrest // []const [first, ...rest] = ["foo"];first // "foo"rest // []

如果将扩展运算符用于数组赋值,只能放在参数的最后一位,否则会报错。

const [...butLast, last] = [1, 2, 3, 4, 5]; // 报错const [first, ...middle, last] = [1, 2, 3, 4, 5]; // 报错

将字符串转为数组

var str = 'hello';// ES5 var arr1 = str.split(''); // [ "h", "e", "l", "l", "o" ] // ES6 var arr2 = [...str]; // [ "h", "e", "l", "l", "o" ] 

实现了 Iterator 接口的对象

任何 Iterator 接口的对象,都可以用扩展运算符转为真正的数组。

var nodeList = document.querySelectorAll('div');var array = [...nodeList];

上面代码中,querySelectorAll方法返回的是一个nodeList对象。它不是数组,而是一个类似数组的对象。这时,扩展运算符可以将其转为真正的数组,原因就在于NodeList对象实现了 Iterator 。

总结

从上面的例子可以看出,rest参数使用场景应该稍少一些,主要是处理不定数量参数,可以避免arguments对象的使用。而扩展运算符的应用就比较广了,在实际项目中灵活应用,能写出更精简的代码。

好了,以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。

相关文章

ps怎么使用画笔画翠绿的小草?

ps怎么使用画笔画翠绿的小草?

电脑软件,ps,如何用ps制作草?为什么PHOTOSHOP自定义的画笔在使用时会有透明度;下面我们就来看看。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更新时间:2015-11-041、打开图片素材,最好是叶子轮廓清晰的2、勾出选区,编辑&md…

word2010中如何对文字进行排序

word2010中如何对文字进行排序

文字,排序,步骤,电脑软件,strong,  word2010的排序功能异常强大,不光可以对数字排序,还可以对文字进行排序,那么下面就由小编给大家分享下word2010中对文字进行排序的技巧,希望能帮助到您,有需要的朋友可以来看看哦。word2010对文字排序的步骤…

利用Photoshop如何绘制有宽度的彩

利用Photoshop如何绘制有宽度的彩

边框,绘制,矩形,宽度,彩色,根据我的使用,我发现在Photoshop CS5中绘制带填充颜色的矩形面域很方便,但绘制矩形边框(不带任何填充的矩形面域)很麻烦。查了长时间的资料才学会,遂记录方法。 下面小编为大家分享的是利用Photoshop绘制有宽度的彩色…

ASP.NET Core简单介绍教程(1)

ASP.NET Core简单介绍教程(1)

教程,简单,电脑软件,ASP,NET,ASP.NET Core 是一个全新的开源、跨平台框架,可以用它来构建基于网络连接的现代云应用程序,比如:Web 应用,IoT(Internet Of Things,物联网)应用和移动后端等。ASP.NET Core可以运行在 .NET Core 或完整的 .NET Framewo…

Photoshop详解四个小技巧快速让你

Photoshop详解四个小技巧快速让你

照片,更有,小技巧,档次,详解,星期一又到了,忙忙碌碌的一周有要开始了,休息了两天,人开始有点犯懒癌。但是我们的教程还是要按时写,写什么好呢?之前计划中的那些我今天先不写啦,突然想给大家先分享一个后期思路,让我们的照片可以瞬间变的高大上。1…

word2010输入次方数字的方法步骤

word2010输入次方数字的方法步骤

步骤,输入,数字,方法,次方,  在数学中,一个数的多少次方,这样表达能大大方便了我们,这样既不需要输入大量的数字,那么怎么在word中输入带次方的数字呢?在下面就由小编给大家分享下word2010输入次方数字的技巧,希望能帮助到您。word2010输…

PPT幻灯片如何从自动翻页改为手动

PPT幻灯片如何从自动翻页改为手动

方法,翻页,幻灯片,设置为,电脑软件,  现如今,电脑的使用越来越普及,许多人上班或者生活中都需要用到PPT办公软件,但其中一些小知识,比如怎么将PPT幻灯片从自动翻页设置为手动翻页?下面小编在这里给大家详细解答。PPT幻灯片从自动翻页设置为手…

Photoshop详细解析新手必须知道的

Photoshop详细解析新手必须知道的

实用技巧,新手,详细,电脑软件,Photoshop,12 3 阅读全文1 23 阅读全文教程结束,以上就是Photoshop详细解析新手必须知道的一些实用技巧的全部内容,希望对你有所帮助!相关教程推荐: ps渐变工具怎么使用?ps渐变工具使用技巧 photoshop cs6魔棒工…

word2007怎么删除首页页码的两种方

word2007怎么删除首页页码的两种方

方法,首页,删除,页码,两种,  在日常的办公应用中我们会遇到这样一个问题,我们的文档的首页为封面或目录页,那么我们文档的页码应当从第二页开始计算,在下面就由小编为大家分享下word2007删除首页页码的技巧,希望能帮助您。word2007删除首页页…

怎么给ppt2010版加入旁白给ppt2010

怎么给ppt2010版加入旁白给ppt2010

步骤,方法,旁白,电脑软件,strong,  ppt加入旁白可以加入演讲者自己的原音也可以提供给不在现场的人,掌握加入旁白的技巧可以给人耳目一新的感觉,瞬间ppt就变得十分上档次。下面小编教你怎么做吧。给ppt2010版加入旁白的步骤打开需要加入旁…

ppt2010怎么添加层叠效果

ppt2010怎么添加层叠效果

快捷键,浏览,控制,方法,效果,  用了PowerPoint 2010,大家都惊讶地发现,2003、2007中的层叠、伸展等一些动画效果不见了。但用2003或2007添加这些效果再在2010中打开时,这些效果仍然显示。也就是说,2010并没有真正去掉这些动画。那么如何在201…

基于js中的原型 | 全面讲解

基于js中的原型 | 全面讲解

原型,电脑软件,js,在讲js的原型之前,必须先了解下Object和Function。Object和Function都作为JS的自带函数,Object继承自己,Funtion继承自己,Object和Function互相是继承对方,也就是说Object和Function都既是函数也是对象。console.log(Function …