JavaScript 面试题
目录

请解释 ES6 中的展开运算符 (Spread Operator) 和剩余参数 (Rest Parameters) 的用法和区别。

· 约 5 分钟读完 · 第 104 / 507 章

推荐答案

展开运算符(Spread Operator)和剩余参数(Rest Parameters)都使用三个点 (...) 语法,但它们的用法和作用完全不同。

展开运算符 (...)

  • 作用: 将一个可迭代对象(如数组、字符串、Set、Map等)“展开”成独立的元素。
  • 场景:
    • 数组或对象字面量创建: 可以方便地创建新的数组或对象,同时包含现有数组或对象的元素/属性。
    • 函数调用: 可以将数组的元素作为函数的独立参数传递。
    • 浅拷贝: 用于创建数组或对象的浅拷贝。

剩余参数 (...)

  • 作用: 将不定数量的函数参数打包成一个数组。
  • 场景:
    • 函数定义: 允许函数接收任意数量的参数,并将它们收集到一个数组中。

区别:

特性 展开运算符 (...) 剩余参数 (...)
用途 展开可迭代对象 收集函数参数
位置 数组/对象字面量中,函数调用时 函数定义的参数列表中
结果 将元素展开为独立的项 将参数收集为数组
作用对象 可迭代对象(数组、字符串等) 函数接收的参数

本题详细解读

展开运算符 (...) 的用法

  1. 数组展开:

  2. 对象展开 (ES2018):

  3. 函数调用:

  4. 浅拷贝:

剩余参数 (...) 的用法

  1. 函数参数收集:

  2. 与解构结合

重要区别总结

展开运算符和剩余参数的关键区别在于其使用场景和目的:

  • 展开运算符主要用于将已有的数组/对象“展开”为独立的元素/属性,常用于创建新的数组/对象、函数调用等。
  • 剩余参数主要用于将函数传入的不定数量的参数收集到一个数组中,方便函数内部处理。

它们虽然都使用三个点 ... ,但在代码中的位置和作用完全不同,需要区分使用。