Hvad er nyt i JavaScript ES2019

Mange af os ved, at der er en standardprocedure for Javascript's nyeste udgivelser, og et udvalg bag det. I dette indlæg vil jeg forklare, hvem der foretager det sidste opkald til enhver ny specifikation, hvad er proceduren for det, og hvad der er nyt i ES2019.

Sprogspecifikationen, der driver JavaScript, kaldes ECMAScript. Der er et hold bag det, der hedder Technical Committee 39 [TC39], der gennemgår alle specifikationer, inden de vedtager .

Enhver ændring gennemgår en proces med stadier af modenhed.

  • Trin 0: Idéer / Strawman
  • Trin 1: Forslag
  • Trin 2: kladder
  • Trin 3: Kandidater
  • Trin 4: Færdig / godkendt

En funktion, der når trin 4, vil sandsynligvis være en del af sprogspecifikationen.

Lad os dykke ned i de ting, der er tilføjet nyligt i specifikationen under ES2019.

Array.prototype. {Flat, flatMap}

Array.prototype.flat()foreslået at flade arrays rekursivt op til det angivne depthog returnerer et nyt array.

Syntaks :Array.prototype.flat(depth)

dybde - Standardværdi 1 , bruges Infinitytil at flade alle indlejrede arrays.

const numbers = [1, 2, [3, 4, [5, 6]]]; // Considers default depth of 1 numbers.flat(); > [1, 2, 3, 4, [5, 6]] // With depth of 2 numbers.flat(2); > [1, 2, 3, 4, 5, 6] // Executes two flat operations numbers.flat().flat(); > [1, 2, 3, 4, 5, 6] // Flattens recursively until the array contains no nested arrays numbers.flat(Infinity) > [1, 2, 3, 4, 5, 6]

Array.prototype.flatMap()kortlægger hvert element ved hjælp af en kortlægningsfunktion og flader resultatet ind i et nyt array. Det er identisk med kortoperationen efterfulgt af a flatdepth1.

Syntaks: Array.prototype.flatMap(callback)

callback:function der producerer et element i den nye Array.

const numbers = [1, 2, 3]; numbers.map(x => [x * 2]); > [[2], [4], [6]] numbers.flatMap(x => [x * 2]); > [2, 4, 6]

Object.fromEntries

Object.fromEntriesudfører det omvendte af Object.entries. Det omdanner en liste med nøgleværdipar til et objekt.

Syntaks: Object.fromEntries(iterable)

iterable: En iterabel lignende Arrayeller Mapeller objekter, der implementerer den iterable protokol

const records = [['name','Mathew'], ['age', 32]]; const obj = Object.fromEntries(records); > { name: 'Mathew', age: 32} Object.entries(obj); > [['name','Mathew'], ['age', 32]];

String.prototype. {TrimStart, trimEnd}

trimStart()fjerner mellemrum fra begyndelsen af ​​en streng og trimEnd()fjerner mellemrum fra slutningen af ​​en streng.

const greeting = ` Hello Javascript! `; greeting.length; > 19 greeting = greeting.trimStart(); > 'Hello Javascript! ' greeting.length; > 18 greeting = 'Hello World! '; greeting.length; > 15 greeting = greeting.trimEnd(); > 'Hello World!' greeting.length; > 12

Valgfri fangstbinding

Forud for den nye specifikation var det nødvendigt at have en undtagelsesvariabel bundet til en catchklausul. ES2019 gjorde det valgfrit.

// Before try { ... } catch(error) { ... } // After try { ... } catch { ... }

Denne funktion er nyttig, når du helt vil ignorere fejlen. Bedste praksis er at overveje at håndtere en fejl.

Der er tilfælde, hvor du kender den mulige fejl, der kan udløse operationer. Du kan ignorere håndtering af fangstblok.

JSON ⊂ ECMAScript

Linjeseparator (U + 2028) og afsnit separator (U + 2029) symboler er nu tilladt i strengbogstaver. Tidligere blev disse behandlet som linjeterminatorer og resulterede i SyntaxErrorundtagelser.

// Produces invalid string before ES2019 eval('"\u2028"'); // Valid in ES2019 eval('"\u2028"');

Velformet JSON.stringify

I stedet for ikke-parrede surrogatkodepunkter, der resulterer i enkelte UTF-16 -kodenheder, repræsenterer ES10 dem med JSON-escape-sekvenser.

JSON.stringify('\uD800'); > '"�"' JSON.stringify('\uD800'); > '"\\ud800"'

Function.prototype.toString

.toString() returnerer nu nøjagtige udsnit af kildekodetekst, inklusive mellemrum og kommentarer.

function /* a comment */ foo () {} // Previously: foo.toString(); > 'function foo() {}' ^ no comment ^ no space // Now: foo.toString(); > 'function /* comment */ foo () {}'

Symbol.prototype.beskrivelse

Skrivebeskyttet egenskab, der returnerer den valgfri beskrivelse af et Symbolobjekt:

Symbol('desc').toString(); > "Symbol(desc)" Symbol('desc').description; > "desc" Symbol('').description; > "" Symbol().description; > undefined

Konklusion

TC39 opbevarer alle de kommende specifikationer, der er i trin> 1 i processen her. Som udvikler er det vigtigt at holde øje med, hvad der sker omkring. Der er mange flere spændende ting, der kommer op lige statiske & private metoder og felter i klasser, Legacy RegE x osv. Find ud af alle de nye ting, der er i forslagsfasen her.

code = coffee + developer

Her er et par mere interessante emner:

  • En hurtig oversigt over JavaScript-symboler
  • Sådan vedtages en git-forgreningsstrategi
  • En introduktion til Git Merge og Git Rebase: Hvad de gør, og hvornår de skal bruges