význam
Expanzný operátor (spread) sú tri bodky (...) )。 Je to ako inverz pokojového parametra, ktorý premení pole na sekvenciu parametrov oddelenú čiarkou.
Tento operátor sa používa najmä na volania funkcií.
V kóde vyššie, array.push(...) položky) a pridávať(...) čísla), ktoré sú volaním funkcií a používajú rozšírené operátory. Tento operátor premení pole na postupnosť parametrov. Rozšírené operátory môžu byť použité v kombinácii s normálnymi funkčnými parametrami, čo je veľmi flexibilné.
Aplikovať metódu pre alternatívne polia
Keďže rozšírený operátor môže pole rozširovať, nie je potrebné použiť metódu apply na premenu poľa na argument funkcie.
Tu je praktický príklad rozširujúceho operátora, ktorý nahrádza metódu aplikovať a aplikuje Math.max metódu na zjednodušenie zápisu najväčšieho prvku poľa.
Vyššie uvedený kód hovorí, že keďže JavaScript neposkytuje funkciu na nájdenie najväčšieho prvku poľa, môžete použiť Math.max funkciu len na premenenie poľa na sekvenciu parametrov a potom nájsť maximálnu hodnotu. S operátorom rozšírenia môžete Math.max používať priamo. Ďalším príkladom je pridanie poľa na chvost iného poľa pomocou funkcie push.
V ES5 metóde písania vyššie uvedeného kódu nemôžu byť parametre push metódy poľami, takže musíme použiť push metódu flexibilne cez metódu apply. Pomocou rozširovacieho operátora môže byť pole priamo odoslané do push metódy. Tu je ďalší príklad.
Rozšíriť použitie operátorov
(1) Zlúčenie polí
Operátor rozšírenia poskytuje nový spôsob zápisu kombinácie čísel.
(2) v kombinácii s dekonštruovaným priradením
Rozšírené operátory je možné kombinovať s dekonštruovanými priradeniami na generovanie polí.
Ak použijete rozšírený operátor na priraďovanie poľa, môže byť umiestnený len na poslednú číslicu parametra, inak sa zobrazí chyba.
(3) Návratová hodnota funkcie
JavaScriptové funkcie môžu vrátiť len jednu hodnotu, a ak je potrebné vrátiť viac hodnôt, len polia alebo objekty. Operátory rozšírenia poskytujú obchádzku na riešenie tohto problému.
Vyššie uvedený kód vezme riadok dát z databázy, rozšíri operátor a odovzdá ho priamo konštruktorovi Date.
(4) Struna
Rozšírené operátory dokážu tiež premeniť reťazce na reálne polia.
Vyššie uvedený zápis má dôležitú výhodu, a to že dokáže správne rozpoznať 32-bitové Unicode znaky.
Prvý spôsob, ako napísať vyššie uvedený kód, je JavaScript, ktorý rozpoznáva 32-bitové Unicode znaky ako 2 znaky, a s rozšírenými operátormi nie je problém. Funkciu, ktorá správne vráti dĺžku reťazca, možno zapísať takto:
Toto je problém pre akúkoľvek funkciu, ktorá zahŕňa manipuláciu s 32-bitovými Unicode znakmi. Preto je najlepšie prepísať ich všetky pomocou rozšírených operátorov.
V uvedenom kóde, ak nepoužijete extension operátor, operácia reverzného reťazca je nesprávna.
(5) Objekty, ktoré implementujú rozhranie Iteratora
Každý objekt v rozhraní Iterátora je možné previesť na skutočné pole pomocou rozšíreného operátora.
V uvedenom kóde metóda querySelectorAll vracia objekt nodeList. Nie je to pole, ale objekt podobný poľu. V tomto prípade môže operátor rozšírenia premeniť rozhranie na reálne pole, pretože objekt NodeList implementuje rozhranie Iterator. Pre objekty podobné poľu, ktoré nemajú nasadené rozhranie Iteratora, operátor rozšírenia ich nemôže premeniť na skutočné pole.
V uvedenom kóde je arrayLike objekt podobný poľu, ale bez nasadenia rozhrania Iteratora operátor rozšírenia nahlási chybu. V takom prípade môžete použiť metódu Array.from na konverziu arrayLike na skutočné pole.
(6) Mapovacie a množinové štruktúry, generátorové funkcie
Operátor rozšírenia interne volá rozhranie Iterátora dátovej štruktúry, takže akýkoľvek objekt s rozhraním Iterátora môže používať operátor rozšírenia, napríklad štruktúru Map.
Keď sa spustí funkcia generátora, vráti objekt prechádzača, takže je možné použiť aj rozšírené operátory.
V uvedenom kóde je premenná go funkciou generátora a po vykonaní vráti objekt pre prechádzanie, pričom vykonanie rozšíreného operátora na tomto objekte prevedie hodnoty získané z interného prechádzania do poľa. Ak použijete rozšírený operátor pre objekt bez iterátorového rozhrania, bude nahlásená chyba.
|