--- tags: ES6, Javascript disqus: hackmd --- # [JS]展開運算子(spread operator) 跟 其餘運算子(rest operator) [[筆記] JavaScript ES6 中的展開運算子(spread operator)和其餘運算子(rest operator)](https://pjchender.blogspot.com/2017/01/es6-spread-operatorrest-operator.html) [展開運算符與其餘運算符](https://eyesofkids.gitbooks.io/javascript-start-from-es6/content/part4/rest_spread.html) --- 在 ES6 中,新增了一個 "..." 的關鍵字,這個關鍵字在不同時間點有不同的效果,有些時候它會被當作展開運算子(spread operator)使用,有些時候則是被當作其餘運算子(rest operator)使用。 **展開運算子可以用在執行函數時的參數列上, 它可以將一個陣列 (array) 展開,轉為多個逗點隔開的獨立參數** ```javascript= function foo(x, y, z) { console.log(x, y, z); } var arr = [1, 2, 3]; // 輸出 1 2 3 // 等同於執行 foo(1, 2, 3) foo(...arr); ``` **其餘運算子只能放在最後一個參數,用來獲取其餘的參數, myArgs 的值是一個陣列 (array),用來存放獲取的參數。** 其餘運算符(Rest Operator)的主要意義是因為它會用在兩個地方,一個是比較常提及的在函式定義中的傳入參數定義中,稱之為其餘參數(Rest parameters)。另一種情況是用在解構賦值時。 傳入參數定義 ```javascript= function fun1(a, ...myArgs) { console.log(a); console.log(myArgs); } // 顯示 [] fun1(); // 顯示 a // [1] fun1('a', 1); // 顯示 a, // [5, 6, 7] fun1('a', 5, 6, 7); ``` 解構賦值 ```javascript= const [x, ...y] = [1, 2, 3] console.log(x) //1 console.log(y) //[2,3] ```