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

推荐答案

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

展开运算符 (...)

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

剩余参数 (...)

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

区别:

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

本题详细解读

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

  1. 数组展开:

  2. 对象展开 (ES2018):

  3. 函数调用:

  4. 浅拷贝:

    -- -------------------- ---- -------
    ----- ------------- - --- -- ---
    ----- ----------- - ------------------- -----------------------------------
    -------------------- -- --- -- -- --
    -------------------------- -- --- -- --
    
    ----- ----------- - ---------
    ----- --------- - ---------------- -------------------------------
    ----------- - --
    ------------------------ -- - -- -- -- - -
    
    -------------------
    ----- ----------- - --- -------
    ----- --------- - -----------------
    -------------- - --
    ------------------------ -- - -- - -- - - -

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

  1. 函数参数收集:

    -- -------------------- ---- -------
    -------- --------- -- -------- -
        --------------- -- -----
        --------------- -- -----
        ------------------ -- --------
    -
    
    --------- -- -- -- ---
    -- ---
    -- -
    -- -
    -- --- -- --
  2. 与解构结合

-- -------------------- ---- -------
-------- ------------ -- ----------- -
  -----------------------
-

---------------- -- - - --- -- --

----- --- - ---------
----- --------------- - ----
------------------ -- -
----------------- -- -------

重要区别总结

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

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

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

纠错
反馈