Spread operator
Sa novim ES2015 standardom je došao novi operator “…” koji može da razdvoji niz u listu i obrnuto da grupiše listu u niz. U zavisnosti koju funkciju obavlja ovaj parametar ima naziv “spread” ili “rest”. Ukoliko se operator nalazi ispred iteratibilnog objekta i “širi” iterator (npr.niz) u pojedinačne vrednosti praveći listu, onda se naziva “spread”.
Transformacija niza u listu argumenata
Ovaj operator je zamena za često korišćen problem kada je potrebno niz prebaciti u listu argumenata. A najbolji primer je “širenje” niza u listu argumenata funkcije. Ovaj operator se koristi pri pozivanju funkcije:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function foo (a,b,c){ console.log(a); console.log(b); console.log(c); } argNiz = [1,2,3]; // Problem funkcija ne prihvata niz: foo(argNiz); // Vraća: [1,2,3], undefined, undefined // Stari način rešavanja problema: foo.apply(null, argNiz); // Vraća: 1,2,3 // Novi pristup sa novom sintaksom foo(...argNiz); // Vraća: 1,2,3 |
Deklaracije niza koji sadrži drugi niz
Koristi se u okviru deklaracije niza koji sadrži drugi niz:
1 2 |
var a = [2,3] var b = [1, ...a]; // [1,2,3] |
Kloniranje objekta
Sa novim standardom je dozvoljeno korišećenje spread operatora u okviru object literala. Ova pogodnost nam omogućava da korišćenjem spread operatora jednostavno kloniramo objekte, bez korišćenja metode Object.assign():
1 2 3 |
var obj1 = { foo: 'bar', x: 42 }; var clonedObj = { ...obj1 }; // Vraca: { foo: 'bar', x: 42 } |
Spajanje dva objekta
Korišećenjem spread operatora je olakšano spajanje dva objekta bez dupliranja svojstava:
1 2 3 4 |
var obj1 = { foo: 'bar', x: 42 }; var obj2 = { foo: 'baz', y: 13 }; var mergedObj = { ...obj1, ...obj2 }; // Vraća: { foo: "baz", x: 42, y: 13 } |