betekenis
De expansie-operator (spread) is drie stippen (...) )。 Het is als de inverse van een rustparameter, waarbij een array wordt omgezet in een komma-gescheiden reeks parameters.
Deze operator wordt voornamelijk gebruikt voor functieaanroepen.
In de bovenstaande code is array.push(...) items) en add(...) nummers), die beide functies aanroepen, en beide gebruiken extensie-operatoren. Deze operator zet een array om in een reeks parameters. Uitbreidingsoperatoren kunnen worden gebruikt in combinatie met normale functieparameters, wat zeer flexibel is.
Toepassing van methode voor alternatieve arrays
Omdat de extensie-operator de array kan uitbreiden, is het niet nodig om de apply-methode te gebruiken om de array om te zetten in een argument voor de functie.
Hier is een praktisch voorbeeld van een extensie-operator die de apply-methode vervangt, waarbij Math.max methode wordt toegepast om het schrijven van het grootste element van een array te vereenvoudigen.
De bovenstaande code zegt dat omdat JavaScript geen functie biedt om het grootste element van een array te vinden, je alleen Math.max functie kunt toepassen om de array om te zetten in een reeks parameters en vervolgens de maximale waarde te vinden. Met de extensie-operator kun je Math.max direct gebruiken. Een ander voorbeeld is door een array toe te voegen aan de staart van een andere array via de push-functie.
In de ES5-schrijfmethode van bovenstaande code kunnen de parameters van de push-methode geen arrays zijn, dus moeten we de push-methode flexibel gebruiken via de apply-methode. Met de extensie-operator kan de array direct in de push-methode worden doorgegeven. Hier is nog een voorbeeld.
Breid de toepassing van operatoren uit
(1) Samenvoegen van arrays
De extensie-operator biedt een nieuwe manier om de combinatie van getallen te schrijven.
(2) gecombineerd met gedeconstrueerde toewijzing
Uitbreidingsoperatoren kunnen worden gecombineerd met gedeconstrueerde toewijzingen om arrays te genereren.
Als je de extensie-operator gebruikt voor array-toewijzing, kan deze alleen bij het laatste cijfer van de parameter worden geplaatst, anders wordt er een foutmelding gerapporteerd.
(3) De retourwaarde van de functie
JavaScript-functies kunnen slechts één waarde teruggeven, en als meerdere waarden moeten worden teruggegeven, alleen arrays of objecten. Extensie-operatoren bieden een omweg om dit probleem op te lossen.
De bovenstaande code neemt een regel data uit de database, verlengt de operator en geeft deze direct door aan de constructor Date.
(4) Snaar
Uitbreidingsoperatoren kunnen strings ook omzetten in reële arrays.
Het bovenstaande schrijven heeft een belangrijk voordeel, namelijk dat het 32-bits Unicode-tekens correct kan herkennen.
De eerste manier om bovenstaande code te schrijven, JavaScript herkent 32-bits Unicode-tekens als 2 tekens, en er is geen probleem met extensie-operatoren. Dus de functie die correct de lengte van de string teruggeeft, kan als volgt worden geschreven:
Dit is het probleem voor elke functie waarbij 32-bits Unicode-tekens worden gemanipuleerd. Daarom is het het beste om ze allemaal te herschrijven met extensie-operatoren.
In bovenstaande code, als je de extensie-operator niet gebruikt, is de string-reverse-operatie onjuist.
(5) Objecten die de Iterator-interface implementeren
Elk object in de Iterator-interface kan worden omgezet in een echte array met een extensie-operator.
In bovenstaande code geeft de querySelectorAll-methode een nodeList-object terug. Het is geen array, maar een array-achtig object. In dit geval kan de extensie-operator het omzetten in een echte array omdat het NodeList-object de Iterator-interface implementeert. Voor die array-achtige objecten zonder Iterator-interface kan de extensie-operator ze niet omzetten in een echte array.
In bovenstaande code is arrayLike een array-achtig object, maar zonder de Iterator-interface te implementeren, zal de extensie-operator een foutmelding geven. In dit geval kun je de Array.from-methode gebruiken om arrayLike om te zetten naar een echte array.
(6) Map- en Setstructuren, generatorfuncties
De extensie-operator roept intern de Iterator-interface van de datastructuur aan, zodat elk object met een Iterator-interface een extensie-operator kan gebruiken, zoals een Map-structuur.
Wanneer de Generator-functie draait, geeft deze een traverserobject terug, zodat extensie-operatoren ook gebruikt kunnen worden.
In bovenstaande code is de variabele go een Generator-functie, en na uitvoering geeft deze een traverser-object terug, en het uitvoeren van een extensie-operator op dit traversal-object zal de waarden die uit interne traversal worden verkregen omzetten in een array. Als je een extensie-operator gebruikt voor een object zonder iteratorinterface, wordt er een foutmelding gemeld.
|