美文网首页
剩余参数

剩余参数

作者: 王康_Wang | 来源:发表于2017-02-06 16:02 被阅读0次

剩余参数(rest parameter)允许长度不确定的实参表示为一个数组。

描述

如果一个函数的最后一个形参是以 ...为前缀的,则在函数被调用是,该形参会成为一个数组,数组中的元素都是传递给该函数的多出来的实参的值。
如下例子中,theArgs 会包含传递给函数的从第三个实参开始到最后所有的实参。

剩余参数恶化 arguments 对象的区别

剩余参数和 arguments 对象的区别主要有三个:

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

使用剩余参数可以避免将 arguments 转为数组的麻烦

// 下面的代码模拟了剩余数组
function f(a, b){
  var args = Array.prototype.slice.call(arguments, f.length);
  // ...
}
// 现在代码可以简化为这样了
function(a, b, ...args) {   
}
示例

因为theArgs是个数组,所以你可以使用length属性得到剩余参数的个数:

function fun1(...theArgs) {
  alert(theArgs.length);
}
fun1();  // 弹出 "0", 因为theArgs没有元素
fun1(5); // 弹出 "1", 因为theArgs只有一个元素
fun1(5, 6, 7); // 弹出 "3", 因为theArgs有三个元素

下例中, 剩余参数包含了从第二个到最后的所有实参. 然后用第一个实参依次乘以它们:

function multiply(multiplier, ...theArgs) {
  return theArgs.map(function (element) {
    return multiplier * element;
  });
}

var arr = multiply(2, 1, 2, 3); 
// [2, 4, 6]
console.log(arr);

下例演示了你可以在剩余参数上使用任意的数组方法,而arguments对象不可以:

function sortRestArgs(...theArgs) {
  var sortedArgs = theArgs.sort();
  return sortedArgs;
}
 
alert(sortRestArgs(5,3,7,1)); // 弹出 1,3,5,7
 
function sortArguments() {
  var sortedArgs = arguments.sort();
  return sortedArgs; // 不会执行到这里
}
 
alert(sortArguments(5,3,7,1)); // 抛出TypeError异常:arguments.sort is not a function

相关文章

  • 剩余参数

    剩余参数(rest parameter)允许长度不确定的实参表示为一个数组。 描述 如果一个函数的最后一个形参是以...

  • 032|匿名函数&函数剩余参数

    函数剩余参数 上一节中,有提到函数剩余参数也能解决不定参数问题。这一节我们就来学习一下剩余参数。 剩余参数(res...

  • ES6 rest参数

    REST参数(剩余参数) MDN:剩余参数语法允许我们将一个不定数量的参数表示为一个数组。剩余参数必须是函数参数的...

  • TypeScript函数

    可选参数(y?) 默认参数 剩余参数 函数重载

  • JS 剩余参数

    例子 上述函数调用会依次打印什么? 'huang', 13, undefined'huang', 13, 'kk'...

  • 11.剩余参数

    剩余参数 ES6的剩余参数可以帮助很简单的将剩余参数组合为一个数组,这在获取函数参数的时候非常有用。 应用场景 对...

  • ES6-剩余参数 and 扩展运算符

    1.ES6的剩余参数可以帮助很简单的将剩余参数组合为一个数组 剩余参数应用场景 2.ES6 扩展运算符是一个与剩余...

  • 【学习笔记】ES6 标准 - 函数默认参数、箭头函数、剩余参数

    ES6 标准 - 函数默认参数、箭头函数、剩余参数

  • arguments 以及 剩余参数

    function sum(){ var sum=0; for (var i = 0; i < argument...

  • 剩余参数(Rest Parameters)

    ES6中的Rest Parameters语法 在ES6中规定了Rest Parameters语法: 请注意f的第三...

网友评论

      本文标题:剩余参数

      本文链接:https://www.haomeiwen.com/subject/xfhuittx.html