ES6:spread syntax —— JavaScript 將元素應用於陣列和函式的優雅方法

發表於2017-04-27

ES6:spread syntax —— JavaScript 將元素應用於陣列和函式的優雅方法

上一篇文章中,我介紹了一些關於 ES6 解構方法的新特性。

本文中我們一起來看一下另外一個 JavaScript 新增語法 —— spread syntax(擴充套件語法)。

spread syntax 實際上非常簡單,假設你的可遍歷物件中有一些元素(如陣列),你想把這些元素應用於另一個新的陣列或者一個函式呼叫。通常的做法,你會從索引開始,利用迴圈訪問每個元素。但是通過 spread syntax 這個事情就變的很簡單了,你可以使用三個點作為字首,即 ... 應用於可遍歷物件上,問題就解決了。

為了更直觀,我們一起看幾個用例就明白了。

複製一個陣列

假設有一個陣列名字是 names。

如何把 names 裡面的元素複製到一個新陣列中呢?

傳統的做法是用迴圈來實現,但是使用 spread syntax,解決方法很簡潔。

可以看到比迴圈方法簡單的多。

這裡值得一提的是,這裡複製的是引用。也就是說如果一個陣列中的元素髮生改變,那麼另一個陣列中的元素也相應地發生改變。

連線陣列

spread syntax 另一個用法是連線陣列,做法是把你想要擴充套件的陣列放到一起。如下:

把獨立變數擴充套件到一起

除了把元素複製到一個新陣列中,還可以把獨立變數一起擴充套件到某陣列中。下面舉個例子,把第一個元素和 names 陣列擴充套件到一起。

還可以把獨立變數放到 names 的後面。

在函式呼叫中使用 spread syntax

你已經掌握瞭如何在陣列中運用 spread syntax,現在我們來看一下如何在函式呼叫中使用。

假設我們有個簡單函式 —— printer —— 接受三個引數,並且列印出來。

依照 printer 函式定義,可以使用 spread syntax 把陣列元素應用於 printer 函式。

和陣列的用法一樣,可以把獨立變數一起輸出。我們新增 ‘Emily’ 作為 printer 函式的第一個引數,後面跟著 ...names

如果傳遞給函式過多的引數,那麼超過函式引數個數的元素將會被忽略掉。

Bonus:spread syntax 應用於物件字面值!

這個特徵是基於 ECMAScript 的附加特徵。但是目前使用它需要 babel 外掛,叫做: babel-plugin-transform-object-rest-spread

通過 spread syntax 這種變體,你可以把兩個物件擴充套件到一起。假設你有兩個物件包含了個人資訊 —— nameAndAgeabout

接下來用 spread syntax 把兩個物件合併到一起。

OK,這篇文章介紹了 spread syntax 的用法。後面我們會繼續介紹 ES6 新特性,敬請繼續關注!

相關文章