pomen
Operator razširitve (razširitev) so tri pike (...) )。 To je kot obrat parametra mirovanja, ki spremeni polje v zaporedje parametrov, ločeno od vejic.
Ta operator se večinoma uporablja za klice funkcij.
V zgornji kodi, array.push(...) predmete) in dodajanje(...) števila), ki sta oba klica funkcij in oba uporabljata operatorje razširitve. Ta operator pretvori polje v zaporedje parametrov. Operatorje razširitve se lahko uporabljajo v kombinaciji z normalnimi funkcijskimi parametri, kar je zelo prilagodljivo.
Metoda uporabe za alternativna polja
Ker lahko operator razširitve razširi polje, ni potrebe po uporabi metode apply, da bi polje spremenili v argument funkciji.
Tukaj je praktičen primer razširitvenega operatorja, ki nadomešča metodo 'apply' in Math.max metodo uporabi za poenostavitev zapisovanja največjega elementa polja.
Zgornja koda pravi, da ker JavaScript ne ponuja funkcije za iskanje največjega elementa polja, lahko Math.max funkcijo uporabiš le, da polje pretvoriš v zaporedje parametrov in nato najdeš največjo vrednost. Z operaterjem razširitve lahko Math.max uporabljate neposredno. Drug primer je dodajanje polja na rep drugega polja preko funkcije potiska.
Pri metodi pisanja ES5 zgornje kode parametri metode potiskanja ne morejo biti polja, zato moramo potisno metodo uporabljati fleksibilno preko metode aplikacije. Z operatorjem razširitve se polje lahko neposredno prenese v metodo potiska. Tukaj je še en primer.
Razširite uporabo operatorjev
(1) Združitev polj
Operator razširitve omogoča nov način zapisovanja kombinacije številk.
(2) združeno z dekonstruirano dodelitvijo
Operatorje razširitve je mogoče kombinirati z dekonstruiranimi dodelitvami za generiranje polj.
Če uporabite operator razširitve za dodeljevanje polj, ga lahko postavite le na zadnjo števko parametra, sicer bo prijavljena napaka.
(3) Povratna vrednost funkcije
JavaScript funkcije lahko vrnejo le eno vrednost, in če je treba vrniti več vrednosti, le polja ali objekte. Operatorji razširitve nudijo rešitev za ta problem.
Zgornja koda vzame vrstico podatkov iz baze, razširi operator in ga neposredno posreduje konstruktorju Date.
(4) Struna
Operatorji razširitve lahko prav tako spremenijo nize v realna polja.
Zgornje pisanje ima pomembno prednost, in sicer, da lahko pravilno prepozna 32-bitne Unicode znake.
Prvi način pisanja zgornje kode je, da JavaScript prepozna 32-bitne Unicode znake kot 2 znaka, in ni težav z operatorji razširitev. Funkcijo, ki pravilno vrne dolžino niza, lahko zapišemo takole:
To je problem za vsako funkcijo, ki vključuje manipulacijo 32-bitnih Unicode znakov. Zato je najbolje, da jih vse prepišete z operatorji razširitve.
V zgornji kodi, če ne uporabljate operatorja razširitve, je operacija obratnega niza napačna.
(5) Objekti, ki implementirajo vmesnik Iteratorja
Vsak objekt v vmesniku Iteratorja je mogoče pretvoriti v pravo polje z operatorjem razširitve.
V zgornji kodi metoda querySelectorAll vrne objekt nodeList. Ni matrika, temveč objekt, podoben matriki. V tem primeru lahko operator razširitve spremeni v pravo polje, ker objekt NodeList implementira vmesnik Iterator. Za tiste objekte, podobne polju, ki nimajo nameščenega vmesnika Iteratorja, operater razširitve ne more spremeniti teh objektov v pravo polje.
V zgornji kodi je arrayLike objekt, podoben polju, vendar brez uporabe vmesnika Iterator operator razširitve poroča o napaki. V tem primeru lahko uporabite metodo Array.from za pretvorbo arrayLike v pravo matriko.
(6) Preslikave in množične strukture, funkcije generatorja
Operator razširitve interno kliče vmesnik Iterator podatkovne strukture, tako da lahko vsak objekt z vmesnikom Iterator uporablja operator razširitve, kot je struktura Map.
Ko se funkcija Generator izvaja, vrne objekt za prečkanje, zato se lahko uporabijo tudi operatorji razširitve.
V zgornji kodi je spremenljivka go funkcija generatorja, in po izvedbi vrne objekt za premikanje, pri čemer izvedba operatorja razširitve na tem objektu pretvori vrednosti, pridobljene z notranjim prehodom, v polje. Če uporabite operator razširitve za objekt brez vmesnika iteratorja, bo napaka prijavljena.
|