js中 剩余运算符(Rest Operator )(...)和展开运算符(Spread Operator)(...)的区别及用法

1、基本说明

在JavaScript中,剩余运算符(Rest Operator)和展开运算符(Spread Operator)虽然在某些方面有相似之处,但它们各自有不同的用途和功能。下面详细解释这两种运算符的区别:

1.1. 剩余运算符(Rest Operator)

剩余运算符 是用在函数参数中,用来收集剩余的参数到一个数组中。它使用三个点(...)表示。这在处理不定数量的参数时非常有用。

1.2. 展开运算符(Spread Operator)

展开运算符 用于将数组元素或对象的属性"展开"到某个位置,比如在函数调用、数组构造或对象字面量中。它同样使用三个点(...)表示。

我们会发现都是三个点(...)表示。

2、实例说明

剩余运算符(Rest Operator)

复制代码
function sum(...numbers: any[]): number {
  // 验证输入并过滤非数字类型
  const validatedNumbers = numbers.filter(num => typeof num === 'number');

  // 如果过滤后数组为空,直接返回 0
  if (validatedNumbers.length === 0) {
    return 0;
  }

  // 使用 reduce 计算总和
  return validatedNumbers.reduce((acc, current) => acc + current, 0);
}

console.log(sum(1, 2, 3)); // 输出: 6
console.log(sum(1, "2", 3)); // 输出: 4 (过滤掉非数字 "2")
console.log(sum()); // 输出: 0 (无参数)
console.log(sum(null, undefined, NaN, {}, [])); // 输出: 0 (所有参数被过滤)
console.log(sum(10, -5, 3.5)); // 输出: 8.5

在这个例子中,...numbers 收集了所有传递给 sum 函数的参数到一个名为 numbers 的数组中。

展开运算符(Spread Operator)

数组展开:

复制代码
let arr1 = [1, 2, 3];
let arr2 = [...arr1, 4, 5];
console.log(arr2); // 输出:[1, 2, 3, 4, 5]

对象展开:

复制代码
let obj1 = { a: 1, b: 2 };
let obj2 = { ...obj1, c: 3 };
console.log(obj2); // 输出:{ a: 1, b: 2, c: 3 }

3、区别总结

  • 剩余运算符(Rest Operator):用于函数参数中,用来收集多个参数为一个数组。

  • 展开运算符(Spread Operator):用于将数组或对象的元素/属性"展开"到另一个数组或对象中。

4、使用场景

  • 使用剩余运算符(Rest Operator)当你需要处理不定数量的参数时。

  • 使用展开运算符(Spread Operator)当你需要将一个数组或对象的元素/属性分散到另一个数组或对象中时。

这两种运算符在JavaScript中提供了强大的功能,使得处理数组和对象时更加灵活和方便。

相关推荐
沐知全栈开发23 分钟前
JavaScript 条件语句
开发语言
RSTJ_162525 分钟前
PYTHON+AI LLM DAY THREETY-SEVEN
开发语言·人工智能·python
吴声子夜歌27 分钟前
Vue3——TypeScript基础
javascript·typescript
清水白石00842 分钟前
《Python性能深潜:从对象分配开销到“小对象风暴”的破解之道(含实战与最佳实践)》
开发语言·python
Je1lyfish1 小时前
CMU15-445 (2025 Fall/2026 Spring) Project#3 - QueryExecution
linux·c语言·开发语言·数据结构·数据库·c++·算法
小李子呢02111 小时前
前端八股Vue---Vue-router路由管理器
前端·javascript·vue.js
Brilliantwxx1 小时前
【C++】 vector(代码实现+坑点讲解)
开发语言·c++·笔记·算法
野生技术架构师1 小时前
2026年最全Java面试题及答案汇总(建议收藏,面试前看这篇就够了)
java·开发语言·面试
百锦再2 小时前
Auto.js变成基础知识学习
开发语言·javascript·学习·sqlite·kotlin·android studio·数据库开发
叼烟扛炮2 小时前
C++第三讲:类和对象(中)
开发语言·c++·类和对象