2015-11-24 64 views
16

我對ES2015中的rest parameter中的spread operator感到困惑。任何人都可以用適當的例子來解釋它們之間的區別嗎?傳播運算符vs ES2015中的Rest參數/ es6

+3

一個在呼叫站點,另一個在參數列表中。或者對於數組,一個在字面上,另一個在解構表達式中。 – Bergi

+0

任何人都可以解釋爲什麼它是downvoted? –

+2

可能因爲沒有顯示研究工作。另外,你在哪裏找到這些術語,他們在哪裏/如何對他們進行了如此糟糕的解釋,以至於你無法區分這些差異? – Bergi

回答

52

使用蔓延,你正在擴大單個變量到更多:

var abc = ['a', 'b', 'c']; 
 
var def = ['d', 'e', 'f']; 
 
var alpha = [ ...abc, ...def ]; 
 
console.log(alpha)// alpha == ['a', 'b', 'c', 'd', 'e', 'f'];

當使用其他參數,你崩潰一個函數的所有剩下的參數到一個數組:

function sum(first, ...others) { 
 
    for (var i = 0; i < others.length; i++) 
 
     first += others[i]; 
 
    return first; 
 
} 
 
console.log(sum(1,2,3,4))// sum(1, 2, 3, 4) == 10;

+0

'const [a,b,... c ] = [1,2,3,4,5,6,7,8,9]'? –

21

ES6具有新功能三個點...

這裏是我們如何使用這些點:

成REST /收集/集中

var [c, ...m] = [1,2,3,4,5]; // m -> [2,3,4,5] 

這裏...m是一個收藏家,它收集其餘的參數。在內部,當我們寫:

var [c, ...m] = [1,2,3,4,5]; JavaScript並以下

var c = 1, 
    m = [2, 3, 4, 5]; 

由於傳播

var params = [ "hello", true, 7 ]; 
var other = [ 1, 2, ...params ]; // other => [1,2,"hello", true, 7] 

這裏,...params利差以assing的所有元素來other

內部的JavaScript腳本如下

var other = [1, 2].concat(params); 

希望這會有所幫助。

+0

迄今爲止我所見過的最易於理解和最簡單的解釋。 – Robert

+0

很好解釋... –

0

基本上像在Python:

>>> def func(first, *others): 
... return [first, *others] 
>>> func('a', 'b', 'c') 
['a', 'b', 'c'] 
0

當我們在代碼中看到 「...」,則可能是其他參數或 蔓延運營商。

有一個簡單的方法來區分他們:

當......是的函數參數的結束,這是「休息參數」 並收集列表的其餘部分到數組。當...發生在函數調用等中時,它被稱爲「擴展運算符」,並將 數組擴展到列表中。使用模式:

其餘參數用於創建接受任意數量的 參數的函數。擴展運算符用於將數組傳遞給功能 ,通常需要許多參數列表。它們共同幫助 輕鬆地在列表和參數數組之間移動。 關於此的更多信息click here