Nouveautés de JavaScript ES2019

Beaucoup d'entre nous savent qu'il existe une procédure standard pour les dernières versions de Javascript et un comité derrière cela. Dans cet article, j'expliquerai qui fait l'appel final pour toute nouvelle spécification, quelle est la procédure à suivre et ce qui est nouveau dans ES2019.

La spécification de langage qui pilote JavaScript est appelée ECMAScript. Il y a une équipe derrière celle appelée Comité technique 39 [TC39] qui examine chaque spécification avant de les adopter .

Chaque changement passe par un processus avec des étapes de maturité.

  • Étape 0: Idées / Homme de paille
  • Étape 1: Propositions
  • Étape 2: Brouillons
  • Étape 3: Candidats
  • Étape 4: Terminé / approuvé

Une fonctionnalité qui atteint l' étape 4 fera très probablement partie de la spécification du langage.

Plongeons dans les choses qui sont nouvellement ajoutées dans la spécification sous ES2019.

Array.prototype. {Flat, flatMap}

Array.prototype.flat()proposé d'aplatir les tableaux de manière récursive jusqu'au spécifié depthet retourne un nouveau tableau.

Syntaxe :Array.prototype.flat(depth)

profondeur - Valeur par défaut 1 , à utiliser Infinitypour aplatir tous les tableaux imbriqués.

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()mappe chaque élément à l'aide d'une fonction de mappage et aplatit le résultat dans un nouveau tableau. C'est identique à l'opération de carte suivie d'un flatde depth1.

Syntaxe: Array.prototype.flatMap(callback)

callback:function qui produit un élément du nouveau 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.fromEntrieseffectue l'inverse de Object.entries. Il transforme une liste de paires clé-valeur en un objet.

Syntaxe: Object.fromEntries(iterable)

iterable: un objet similaire Arrayou Mapou itérable implémentant le protocole itérable

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()supprime les espaces au début d'une chaîne et trimEnd()supprime les espaces à la fin d'une chaîne.

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

Reliure de capture facultative

Avant la nouvelle spécification, il était nécessaire d'avoir une variable d'exception liée à une catchclause. ES2019 l'a rendu facultatif.

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

Cette fonctionnalité est utile lorsque vous souhaitez ignorer complètement l'erreur. La meilleure pratique consiste à envisager de gérer une erreur.

Il existe des cas où vous connaissez l'erreur possible qui pourrait se déclencher sur les opérations. Vous pouvez ignorer la gestion du bloc catch.

JSON ⊂ ECMAScript

Les symboles de séparateur de ligne (U + 2028) et de séparateur de paragraphe (U + 2029) sont désormais autorisés dans les chaînes littérales. Auparavant, ils étaient traités comme des terminateurs de ligne et entraînaient des SyntaxErrorexceptions.

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

JSON.stringify bien formé

Au lieu de points de code de substitution non appariés résultant en des unités de code UTF-16 uniques, ES10 les représente avec des séquences d'échappement JSON.

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

Function.prototype.toString

.toString() renvoie désormais les tranches exactes du texte du code source, y compris les espaces et les commentaires.

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

Symbol.prototype.description

Propriété en lecture seule qui renvoie la description facultative d'un Symbolobjet:

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

Conclusion

TC39 conserve ici toutes les spécifications à venir qui sont à l'étape> 1 du processus. En tant que développeur, il est important de garder un œil sur ce qui se passe autour. Il y a beaucoup plus de choses passionnantes à venir dans les méthodes et champs statiques et privés dans les classes, Legacy RegE x, etc. Découvrez ici toutes les nouveautés qui sont au stade de la proposition.

code = coffee + developer

Voici quelques sujets plus intéressants:

  • Un aperçu rapide des symboles JavaScript
  • Comment adopter une stratégie de branchement git
  • Une introduction à Git Merge et Git Rebase: ce qu'ils font et quand les utiliser