rost
Operatorul de expansiune (spread) este format din trei puncte (...) )。 Este ca inversul unui parametru REST, transformând un tablou într-o secvență separată de virgule de parametri.
Acest operator este folosit în principal pentru apeluri de funcție.
În codul de mai sus, array.push(...) elemente) și add(...) numere), ambele fiind apeluri către funcții și ambele folosind operatori de extensie. Acest operator transformă un tablou într-o secvență de parametri. Operatorii de extensie pot fi folosiți în combinație cu parametrii funcției normale, ceea ce este foarte flexibil.
Metoda de aplicare pentru tablouri alternative
Deoarece operatorul de extensie poate extinde tabloul, nu este nevoie să se folosească metoda apply pentru a transforma tabloul într-un argument pentru funcție.
Iată un exemplu practic de operator de extensie care înlocuiește metoda apply, aplicând Math.max metodă pentru a simplifica scrierea celui mai mare element al unui tablou.
Codul de mai sus spune că, deoarece JavaScript nu oferă o funcție pentru a găsi cel mai mare element al unui array, poți aplica doar Math.max funcție pentru a transforma tabloul într-o secvență de parametri și apoi să găsești valoarea maximă. Cu operatorul de extensie, poți folosi Math.max direct. Un alt exemplu este adăugarea unui tablou la coada altui tablou prin funcția push.
În metoda de scriere ES5 a codului de mai sus, parametrii metodei push nu pot fi tablouri, așa că trebuie să folosim metoda push flexibil prin metoda apply. Cu operatorul de extensie, tabloul poate fi transmis direct în metoda push. Iată un alt exemplu.
Extinderea aplicării operatorilor
(1) Matricele de fuziune
Operatorul de extensie oferă o nouă modalitate de a scrie combinația de numere.
(2) combinată cu atribuirea deconstruită
Operatorii de extensie pot fi combinați cu atribuiri deconstruite pentru a genera tablouri.
Dacă folosești operatorul de extensie pentru alocarea tabloului, acesta poate fi plasat doar la ultima cifră a parametrului, altfel va fi raportată o eroare.
(3) Valoarea returnată a funcției
Funcțiile JavaScript pot returna o singură valoare, iar dacă trebuie returnate mai multe valori, doar tablouri sau obiecte. Operatorii de extensie oferă o soluție pentru a rezolva această problemă.
Codul de mai sus preia o linie de date din baza de date, extinde operatorul și o transmite direct constructorului Date.
(4) Șnură
Operatorii de extensie pot, de asemenea, transforma șiruri în tablouri reale.
Scrierea de mai sus are un avantaj important, și anume că poate recunoaște corect caractere Unicode pe 32 de biți.
Prima modalitate de a scrie codul de mai sus, JavaScript, recunoaște caracterele Unicode pe 32 de biți ca fiind de 2 caractere, iar operatorii de extensie nu există nicio problemă. Astfel, funcția care returnează corect lungimea șirului poate fi scrisă astfel:
Aceasta este problema oricărei funcții care implică manipularea caracterelor Unicode pe 32 de biți. Prin urmare, este mai bine să le rescrii pe toate cu operatori de extensie.
În codul de mai sus, dacă nu folosești operatorul de extensie, operația de inversare a șirurilor este incorectă.
(5) Obiecte care implementează interfața Iterator
Orice obiect din interfața Iterator poate fi convertit într-un adevărat tablou cu un operator de extensie.
În codul de mai sus, metoda querySelectorAll returnează un obiect nodeList. Nu este un aranjament, ci un obiect asemănător unui aranjament. În acest caz, operatorul de extensie îl poate transforma într-un tablou real deoarece obiectul NodeList implementează interfața Iterator. Pentru acele obiecte asemănătoare unui array care nu au o interfață Iterator implementată, operatorul de extensie nu le poate transforma într-un array real.
În codul de mai sus, arrayLike este un obiect asemănător unui tablou, dar fără a implementa interfața Iterator, operatorul de extensie va raporta o eroare. În acest caz, poți folosi metoda Array.from pentru a converti arrayLike într-un array real.
(6) Structuri de aplicație și mulțime, funcții generatoare
Operatorul de extensie apelează intern interfața Iterator a structurii de date, astfel încât orice obiect cu o interfață Iterator poate folosi un operator de extensie, cum ar fi o structură Map.
Când funcția Generator rulează, returnează un obiect traverser, astfel încât pot fi folosiți și operatori de extensie.
În codul de mai sus, variabila go este o funcție generatoare, iar după execuție returnează un obiect traverser, iar executarea unui operator de extensie pe acest obiect de traversare va converti valorile obținute din traversarea internă într-un tablou. Dacă folosești un operator de extensie pentru un obiect fără interfață de iterator, va fi raportată o eroare.
|