本文介紹了 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) => ...