JavaScript - 解構賦值(Destructuring Assignment)
解構賦值可以用來提取陣列或物件中的資料,讓原本可能需要迴圈或迭代的功能可以用更簡易的語句來達成。而展開運算符與其餘運算符可以讓我們更靈活的使用函式,在處理從 API 取得的資料時也更加容易。
解構陣列(Destructuring Array)
範例 :
1 | // 基本用法 |
解構物件(Destructuring Object)
範例 :
1 | // 基本用法 |
展開運算符(Spread Operator)與其餘運算符(Rest Operator)
為 ES6 的新特性,兩者語法皆為 ...
。
展開運算符(Spread Operator)
可以將陣列展開成個別的值。在定義陣列或函式呼叫傳入陣列時使用。
組合陣列 :
1 | const arr = [1, 2, 3] |
複製陣列 :
1 | const arr = [1, 2, [3, 4]] |
需要注意的是展開運算符為淺複製(shallow-copy),對於子物件只會複製其參考值(reference)。
呼叫函式時傳入陣列 :
1 | const arr = [1, 2, 3] |
只有可迭代的值可以使用展開運算符傳入函式。可迭代的值包含 String、Array、Map、Set,但不包括 Object。
組合物件 :
1 | const obj = { a: 1 } |
其餘運算符(Rest Operator)
將剩餘的值包裝成一個陣列。
解構陣列 :
1 | const [a, b, ...c] = [1, 2, 3, 4] // a = 1, b = 2, c = [3, 4] |
特別注意,使用其餘運算符的元素必須要是最後一個元素,並且在每次解構賦值中只能使用一次。
解構物件 :
1 | const { a, ...obj } = { a: 1, b: { c: 2 } } // a = 1, obj = {b: {c: 2}} |
函式其餘參數 :
1 | function sum(...args) { |
當其餘參數沒有傳入實際值時,會變空陣列,而不是 undefined
。
其餘參數的設計是為了取代函式中的 arguments
關鍵字,arguments
實際為包含所有傳入參數的類陣列(array-like)物件,所以本身不具備陣列相關的方法,因此不建議使用 arguments
。