剩余参数

剩余参数语法允许我们将一个不定数量的参数表示为一个数组。

剩余参数的语法形式是三个点后跟一个标志符。

语法

1 function(a, b, ...theArgs) {
2     //函数体
3 }

如果函数的最后一个命名参数 ... 为前缀,则它将成为一个由剩余参数组成的真数组,其中从0(包括)到theArgs.length(排除)的元素由传递给函数的实际参数提供。

1 function sum(...theArgs) {
2     return theArgs.reduce((previous, current) => {
3         return previous + current;
4     });
5 }
6 
7 console.log(sum(1, 2, 3));  //6
8 
9 console.log(sum(1, 2, 3, 4));   //10

剩余参数和arguments对象的区别

  1. 剩余参数只包含那些没有对应形参的实参,而arguments对象包含了传给函数的所有实参
  2. arguments对象不是一个真正的数组,而剩余参数是真正的Array实例,也就是说能够在它上面直接使用所有的数组方法,比如sort,map,forEach或pop。
  3. arguments对象还有一些附加的属性(如callee属性)。

将arguments对象转换为数组

 1 function f(a, b) {
 2     var normalArray = Array.prototype.slice.call(arguments);
 3     //or
 4     var normalArray = [].slice.call(arguments);
 5     //or
 6     var normalArray = Array.from(arguments);
 7     
 8     var first = normalArray.shift();  //OK
 9     var first = arguments.shift(); //ERROR
10 }
11 
12 function f(...args) {
13     var normalArray = args;
14     var first = normalArray.shift(); //OK
15 }

解构剩余参数

剩余参数可以被解构,这意味着它们的数据可以被解包到不同的变量中。

1 function f(...[a, b, c]) {
2     return a + b + c;
3 }
4 
5 f(1);  //NaN (b and c are undefined)
6 f(1, 2, 3) ;//6
7 f(1, 2, 3, 4); //6

注:剩余参数后面不能再跟参数。剩余参数不能与arguments对象一起使用。

 

posted @ 2020-09-26 14:50  焱雨  阅读(476)  评论(0编辑  收藏  举报