Nouveautés de JavaScript ES2019

Il existe une procédure standard pour les dernières versions de Javascript et il y a tout un comité derrière. Dans cet article, je vais parler de qui prend les décisions sur toute nouvelle spécification, quelle est la procédure à suivre et quelles sont les nouveautés d' ES2019 .

image

La spécification de langage qui contrôle JavaScript est appelée ECMAScript . Il existe un groupe appelé Comité technique 39 [TC39] , qui examine chaque spécification avant son adoption.

Chaque changement se déroule par étapes:

  • Étape 0: Idées
  • Étape 1: Offres
  • Étape 2: Brouillons
  • Étape 3: Candidats
  • Étape 4: Achèvement / approbation

Une fonction qui atteint l'étape 4 est susceptible de faire partie de la spécification du langage.

Tenez compte de ce qui est ajouté à la spécification conformément à ES2019.

Array.prototype. {Flat, flatMap}


Array.prototype.flat () vous permet de lisser récursivement des tableaux à une profondeur donnée et de renvoyer un nouveau tableau.

Syntaxe: Array.prototype.flat (profondeur)
depth - la valeur par défaut est 1, utilisez Infinity pour lisser 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 aligne le résultat sur un nouveau tableau. Ceci est identique à l'opération de carte , suivi d'une profondeur plate de 1.

Syntaxe: Array.prototype.flatMap (rappel)
callback: une fonction qui produit l'élément d'un nouveau tableau.

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

Object.fromEntries


Object.fromEntries fait le contraire d'Object.entries. Il convertit une liste de paires clé-valeur en un objet.

Syntaxe: Object.fromEntries (itérable)
itération: itération en tant qu'objets Array ou Map qui implémentent 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 ligne et trimEnd () supprime les espaces à la fin d'une ligne.

 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 à cliquet en option


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

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

Cette fonctionnalité est utile si vous souhaitez ignorer complètement l'erreur. La meilleure pratique consiste à envisager la gestion des erreurs.

Il y a des moments où vous connaissez une erreur possible qui pourrait fonctionner lors de l'exécution des opérations. Et vous pouvez ignorer la gestion des captures.

JSON ⊂ ECMAScript


Les caractères de séparation de ligne (U + 2028) et les caractères de séparation de paragraphe (U + 2029) sont désormais autorisés dans les littéraux de chaîne. Auparavant, ils étaient considérés comme des terminateurs de chaîne et lançaient des exceptions SyntaxError .

 // 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 menant à des unités de code UTF-16 uniques, ES10 les représente à l'aide de séquences d'échappement JSON.

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

Function.prototype.toString


.toString () renvoie désormais des extraits exacts 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


Une propriété en lecture seule qui renvoie une description facultative de l'objet Symbol :

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

Conclusion


Il y a beaucoup d'autres choses intéressantes, telles que les méthodes et champs statiques et privés dans les classes, LegEx RegEx, etc. Il est important pour le développeur de surveiller l'émergence de nouvelles technologies, d'améliorer les anciennes et de l'utiliser dans le travail.

Il sera utile de lire les versions précédentes: ES2015 ES2016 ES2017 ES2018

Source: https://habr.com/ru/post/fr439532/


All Articles