2018年12月13日 星期四

[ES6] 點點點(...)——展開運算子(Spread Operator)vs 其餘運算子(Rest Operator)

點點點(...)作為一元運算子,位置在運算元之前。有兩種用法:

1. 展開運算子(Spread Operator):把陣列展開成參數

在陣列前面加上...,即可把每個陣列元素逐一展開,直接餵給函式當作若干個參數輸入。

假設有一個函式只能吃參數,例如Math.max(),返回所有參數中的最大值:
Math.max(9, 3, 7, 13, 5);  //13

直接餵陣列,它不吃:
Math.max([9, 3, 7, 13, 5]);  //NaN

在陣列前面加上展開運算子就可以了:
Math.max(...[9, 3, 7, 13, 5]);  //13

2. 其餘運算子(Rest Operator):把參數合併成陣列

跟展開運算子剛好相反。在陣列前面加上...,即可把所有參數合併成一個陣列,再餵給只吃陣列的函式當作輸入值。效果有點類似一般函式物件的arguments屬性(以類陣列型態存放所有輸入的參數)。

假設有一個函式預設只能吃陣列。例如輸入陣列,計算其項目個數:

let count = arr => arr.length;
console.log(count([6, 9, 37, 17, 64]));  //5

若餵一堆參數它是不吃的:
console.log(count(6, 9, 37, 17, 64));  //undefined

但若幫函式的參數加上其餘運算子,就可以囉:
let count = (...arr) => arr.length;
console.log(count(6, 9, 37, 17, 64));  //5

參考:
JavaScript ES6 中的展開運算子(spread operator)和其餘運算子(rest operator) ~ PJCHENder 那些沒告訴你的小細節

沒有留言:

張貼留言

MJML完整語法說明

MJML 是一套由電子報服務商MailJet貢獻出來的開源框架,能用簡單的語法輕鬆撰寫響應式(RWD)的電子郵件內容,再透過免費開源的 轉檔程式 或 線上編輯器 ,產生最終的標準HTML程式碼。 上一篇 稍微針對其版面布局結構做了一點簡介,這篇就完整照著官網技術文件的內容(2...