學習 JavaScript 的展開運算子基礎知識

你可以使用展開運算子 ... 來擴展陣列、物件或字串。

首先從陣列的例子開始。給定

const a = [1, 2, 3]

你可以使用以下方式來建立一個新陣列

const b = [...a, 4, 5, 6]

你也可以使用以下方式來複製一個陣列

const c = [...a]

這對物件也同樣適用。你可以使用以下方式來克隆一個物件

const newObj = { ...oldObj }

使用字串時,展開運算子會將字串中的每個字元創建一個陣列

const hey = 'hey'
const arrayized = [...hey] // ['h', 'e', 'y']

這個運算子有一些非常有用的應用。其中最重要的應用之一是能夠非常簡單地將陣列作為函式參數使用

const f = (foo, bar) => {}
const a = [1, 2]
f(...a)

在處理陣列解構賦值時,rest 元素非常有用

const numbers = [1, 2, 3, 4, 5]
const [first, second, ...others] = numbers

以及spread 元素

const numbers = [1, 2, 3, 4, 5]
const sum = (a, b, c, d, e) => a + b + c + d + e
const result = sum(...numbers)

ES2018 引入了rest 屬性,對於物件也是一樣的

Rest 屬性

const { first, second, ...others } = {
  first: 1,
  second: 2,
  third: 3,
  fourth: 4,
  fifth: 5
}

first // 1
second // 2
others // { third: 3, fourth: 4, fifth: 5 }

Spread 屬性 允許通過結合展開運算子後的物件的屬性來創建一個新物件:

const items = { first, second, ...others }
items //{ first: 1, second: 2, third: 3, fourth: 4, fifth: 5 }

這也是將兩個簡單物件合併為一個物件的完美方式:

const object1 = {
  name: 'Flavio'
}

const object2 = {
  age: 35
}

const object3 = {...object1, ...object2 }