时间:2021-05-28
前言
本文主要给大家介绍了关于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参数时应注意一下两点:
1、rest 参数之后不能再有其他参数(即只能是最后一个参数),否则会报错。
2、函数的length属性,不包括 rest 参数。
扩展运算符
扩展运算符可以看做是 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对象的使用。而扩展运算符的应用就比较广了,在实际项目中灵活应用,能写出更精简的代码。
好了,以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了es6数组之扩展运算符操作。分享给大家供大家参考,具体如下:扩展运算符(spread)是三个点(…)。它好比rest参数的逆运算,将一个数组转为用
本文实例讲述了ES6扩展运算符和rest运算符用法。分享给大家供大家参考,具体如下:运算符可以很好的为我们解决参数和对象数组未知情况下的编程,让我们的代码更健壮
本文实例讲述了ES6基础之数组和对象的拓展。分享给大家供大家参考,具体如下:数组的扩展1.拓展运算符('...'),它相当于rest参数的逆运算,用于将一个数组
本文实例讲述了JavaScript扩展运算符用法。分享给大家供大家参考,具体如下:扩展运算符格式扩展运算符格式很简单,就是三个点(…)重点:需要ES6语法支持扩
ES6的扩展运算符可以说是非常使用的,在给多参数函数传参,替代Apply,合并数组,和解构配合进行赋值方面提供了很好的便利性。扩展运算符就是三个点“...”,就