Skip to content

剩余参数

什么是剩余参数

ES6 中引入了 rest(剩余)参数,允许将不确定部分的参数合成一个数组。其写法为 ...变量名,变量是一个数组,用来保存不确定部分的参数。

ts
// ...args 为剩余参数,其中变量args表示一个数组,用来接受传过来的所有实参
const sum = (...args) => {
  console.log(args);
};
sum(1, 2, 3, 4); //  [1, 2, 3, 4]
sum(); // []

// ...args 为剩余参数,其中变量args表示一个数组,用于接受第3个(包含)之后的所有实参
const f = (a, b, ...args) => {
  console.log(a); // 1
  console.log(b); // 2
  console.log(args); // [3, 4, 5]
};
f(1, 2, 3, 4, 5);

剩余参数的本质

剩余参数中的变量本质是一个数组,即使没有值,也是一个空数组,所以数组所有的方法这个变量都可以用

ts
const f = (a, ...args) => {
  args.push(a);
  console.log(args); //[1]
};
f(1);

剩余参数的注意事项

  • 剩余参数之后不能再有其它参数,即剩余参数必需是最后一个参数,否则会报错
ts
const f = (a,...args,b) => {} // 报错
  • 当箭头函数中只有一个剩余参数时,其圆括号也不能省略
ts
// const f = ...args => args;  错误写法
const f = (...args) => args;
console.log(f(1, 2, 3)); // [1, 2, 3]

剩余参数在实际开发中的应用

  • 根据实参传递的个数来求和
ts
// 箭头函数与剩余参
const sum = (...args) => {
  var result = 0;
  args.forEach((item) => {
    result += item;
  });
  return result;
};
console.log(sum(1, 2, 3, 4));
  • 剩余参数与数组的解构赋值的结合应用

剩余参数不一定非要作为函数参数使用,解构赋值也可以使用

当剩余参数与解构赋值结合使用时,我们称他为 剩余元素。

同时在与解构赋值结合时,也只能是最后一个元素,之后不能再有其他参数,否则会报错

ts
// 绑定模式
let [a, b, ...c] = [1, 2, 3, 4, 5, 6];
console.log(a); // 1
console.log(b); // 2
console.log(c); //  [3, 4, 5, 6]
  • 剩余参数与与对象的解构赋值结合应用
ts
// 绑定模式
const { a, b, ...c } = { a: 1, b: 2, c: 3, d: 5 };
console.log(a); // 1
console.log(b); // 2
console.log(c); // {c: 3, d: 5}

Released under the MIT License.