跳至主要内容
Rest vs Spread syntax in JavaScript

from Amit Merchant

Beginner

/

JavaScript / TypeScript

本文介紹了 JavaScript 中兩種語法:Spread 和 Rest Operator,雖然都是以 … 表現,但它們在程式碼中都有不同的用途。Spread 負責將東西放進一個東西裡面,而 Rest Operator 則是將多個參數轉換成一個陣列。

Spread 負責將東西 (例如陣列、物件) 放進一個東西裡面 (例如另一個陣列、物件,或是一個函式的參數)。

// spread into object
const obj = { a: 1, b: 2 };
const newObj = { ...obj, b: 3 }; // { a: 1, b: 3 }

// spread into array
const arr = [1, 2, 3];
const newArr = [...arr, 4]; // [1, 2, 3, 4]

// spread into function
const sum = (a, b, c, d) => a + b + c + d;
sum(...newArr); // 1 + 2 + 3 + 4

Rest 通常都是在函式中使用。負責將一個個分散的東西 (例如多個參數) 組合成一個陣列。

// use rest operator as the only argument
const print = (...args) => console.log(args);
print(1, 2, 3); // [1, 2, 3]

// use rest operator as the last argument
const print = (a, b, ...rest) => console.log(a, b, rest);
print(1, 2, 3, 4); // 1, 2, [3, 4]

一個函式的參數只能有一個 rest operator,而且必須是最後一個參數。以下是兩個錯誤的例子:

// error: multiple rest operators
const sum = (a, b, ...restOfArguments, ...restOfArguments2) => ...

// error: rest operator is not the last argument
const sum = (a, b, ...restOfArguments, c) => ...