Wat is er nieuw in de ES2021-standaard voor JavaScript?

0
166

De jaarlijkse release van ECMAScript is er, met nieuwe functies en syntaxisverbeteringen. De specificatie werd op 22 juni 2021 afgerond door de ECMA International Standards Organization, wat aangeeft dat het nu klaar is voor gebruik.

ECMAScript's meest populaire implementatie is JavaScript, de taal die wordt ondersteund door web browsers en cloudomgevingen via runtimes zoals Node.js. Hier volgt een overzicht van de belangrijkste wijzigingen in ES2021.

Promise.any()

Promise.any() voltooit de totale ondersteuning voor foutafhandeling voor beloften. Het zal kortsluiten en terugkeren zodra een van de gepasseerde Promise-objecten is vervuld.

Als alle beloften mislukken, wijst de methode af met een nieuwe AggregateError. Dit object vat de afwijzingsredenen voor elk van de individuele fouten samen.

const belooft = [doSomething(), doSomethingAnders()];   probeer {   //Dit is de geretourneerde waarde van `doSomething()` //of `doSomethingElse()`, afhankelijk van welke //eerst const firstToResolve = wait Promise.any(promises); oplost   }   vang (fouten) {   voor (const error of errors) { //Herhaal de individuele redenen voor afwijzing van de belofte }   }

Promise.any() is handig in scenario's waarin u actie moet ondernemen als ten minste één belofte wordt opgelost, maar het maakt niet uit als sommige niet slagen. Het vormt een aanvulling op de bestaande methoden Promise.all() en Promise.allSettled().

Hier is een korte samenvatting van de verschillen:

  • any( ) – Lost op als een belofte wordt opgelost. Weigert als alle beloften worden afgewezen.
  • all()– Lost op als alle beloften worden opgelost. Weigert als een belofte wordt afgewezen.
  • allSettled() – Lost op zodra alle beloften zijn opgelost of afgewezen. Deze methode verwerpt niet.

Logical Assignment Operators

ES2021 wordt geleverd met enkele lang gevraagde operatorverbeteringen. Nieuwe operators voor logische toewijzingen zorgen voor gemakkelijke kortsluiting waardoor er minder code hoeft te worden geschreven.

Advertentie

De drie operatoren (&&=, ||= en ??=) combineren hun overeenkomstige logische vergelijking met een waardetoewijzing. U hoeft de variabelenaam niet langer twee keer te schrijven als u alleen toewijst wanneer de vergelijking overeenkomt:

//ES2020 x && (x = y) x || (x = y) x = x ?? y & nbsp; //ES2021 x &&= y; x ||= y; x??= y;

Dit helpt om de ondersteuning van de operator af te ronden en vermindert de herhaling van opdracht-zware code. Het geeft logische operatoren dezelfde toewijzingsintegratie als de wiskundige operatoren (+=, -=, *=).

String.prototype.replaceAll()

Een nieuwe methode op het String-prototype maakt het veel gemakkelijker om alle instanties van een substring te vervangen, zonder toevlucht te nemen tot een regex. Wanneer de bestaande methode Replace() een string als invoer krijgt, vervangt deze alleen de eerste instantie van die waarde. vervangAll() voegt het gedrag toe dat veel ontwikkelaars wilden en verwachtten.

const str = "xxxyz";   //xxyz console.log(str.replace("x", ""));   //yz console.log(/x/g, "");   //yz console.log(str.replaceAll("x", ""));

Het is een kleine functie die onmiddellijk praktisch nut zou moeten hebben. Een ReplaceAll()-aanroep verhoogt de leesbaarheid van code in vergelijking met een regex met een g (globale) modifier. Dit is vooral het geval wanneer u werkt met minder ervaren ontwikkelaars die misschien niet weten waarom de regex werd gebruikt.

Numerieke scheidingstekens

A eenvoudige wijziging voegt scheidingstekens voor cijfers toe aan de standaard JavaScript-syntaxis. Hiermee kunt u onderstrepingstekens tussen cijfers in letterlijke getallen plaatsen, waardoor ze beter leesbaar worden. Ze worden automatisch verwijderd wanneer uw bestanden worden geparseerd.

//ES2020 – Dit is moeilijk in één oogopslag te zien! const miljard = 1000000000;   //ES2021 – Dit kan beter leesbaar zijn const miljard = 1_000_000_000; Advertentie

Scheidingstekens bootsen de manier na waarop komma's worden gebruikt tussen groepen geschreven getallen. Het gebruik ervan is volledig optioneel. De syntaxis werkt ook voor binaire en hexadecimale letterlijke waarden die worden voorafgegaan door 0b en 0x.

Geavanceerde functies

ES2021 bevat enkele nieuwe objecten die gericht zijn op meer geavanceerde gebruiksscenario's. Ten eerste is er WeakRef, een mechanisme dat een verwijzing naar een object vasthoudt, maar het in aanmerking laat komen voor garbagecollection. De referentie is “zwak” omdat er geen garantie is dat het in de toekomst bruikbaar zal zijn.

Je hebt toegang tot het object totdat het is verzameld. Het is misschien helemaal geen afval dat wordt verzameld, omdat het aan de browser is wanneer objecten zonder referentie moeten worden verwijderd.

Je maakt zwakke referenties met de WeakRef-constructor en geeft het object door dat je wilt gebruiken. U kunt later toegang krijgen tot het originele object door deref() aan te roepen.

const x = {}; const xWeakRef = nieuw WeakRef(x);   const deRef = xWeakRef.deref(); //dit is het object van `x`

Zwakke verwijzingen moeten worden gebruikt om grote objecten in de cache op te slaan die niet essentieel zijn voor uw toepassing. De browser kan ze opschonen in tijden van weinig geheugen, waardoor de algehele prestaties verbeteren.

Naast zwakke referenties biedt de nieuwe FinalizationRegistry-constructor meldingen wanneer objecten worden verzameld. Het is niet mogelijk om de vuilnisophaaldienst te annuleren; deze functie is bedoeld om u te laten reageren op opschoningen door andere bijbehorende bronnen vrij te maken. Als bijvoorbeeld een object dat een gebruiker vertegenwoordigt, is verzameld, kunt u de callback gebruiken om een ​​in de cache opgeslagen blob van hun profielfoto te verwijderen.

const registry = new FinalizationRegistry(key => { //Deze callback wordt uitgevoerd wanneer een //geregistreerd object wordt verzameld als (key === "gebruiker") { //Verwijder hier gecachte gebruikersgegevens. } });   const user = {Gebruikersnaam: "CloudSavvy"}; registry.register(gebruiker, "gebruiker"); Advertentie

In dit voorbeeld wordt uw callback uitgevoerd en wordt user als parameter ontvangen wanneer het x-object wordt verzameld. U kunt de sleutel gebruiken om vergelijkbare gegevens te identificeren en te verwijderen. U moet dit mechanisme zelf maken.

Conclusie

ES2021 is een gezonde specificatie-update die nieuwe gemaksfuncties voor de ECMAScript-gemeenschap brengt. Promise.any() voltooit de line-up voor het afhandelen van beloften, terwijl operators voor logische toewijzingen en ReplaceAll() het dagelijkse gebruiksgemak verbeteren.

Hoewel het nog maar net is afgerond, zijn ES2021-functies het hele jaar door in browsers beschikbaar gekomen . Chromium, Firefox en Safari bieden al volledige ES2021-ondersteuning, dus je kunt vandaag nog code schrijven met de nieuwe mogelijkheden. Functies zoals Promise.any() en String.prototype.replaceAll() kunnen gemakkelijk worden ingevuld voor oudere browsers; andere, zoals operators voor logische toewijzingen, kunnen worden afgehandeld door pre-processors zoals Babel.