Aller au contenu principal

9 articles tagués avec « ES2020 »

Voir tous les tags

`Atomics.wait`, `Atomics.notify`, `Atomics.waitAsync`

· 8 minutes de lecture
[Marja Hölttä](https://twitter.com/marjakh), une blogueuse non bloquante

Atomics.wait et Atomics.notify sont des primitives de synchronisation bas-niveau utiles pour implémenter des mutex et d’autres moyens de synchronisation. Cependant, étant donné que Atomics.wait est bloquant, il est impossible de l’appeler sur le thread principal (une tentative entraîne une TypeError).

Coalescence nulle

· 7 minutes de lecture
Justin Ridgewell

La proposition de coalescence nulle (??) ajoute un nouvel opérateur de court-circuit destiné à gérer les valeurs par défaut.

Vous connaissez peut-être déjà les autres opérateurs de court-circuit && et ||. Ces deux opérateurs traitent les valeurs « vraies » (truthy) et « fausses » (falsy). Imaginez l'exemple de code lhs && rhs. Si lhs (lire, côté gauche) est falsy, l'expression est évaluée à lhs. Sinon, elle est évaluée à rhs (lire, côté droit). L'inverse est vrai pour l'exemple de code lhs || rhs. Si lhs est truthy, l'expression est évaluée à lhs. Sinon, elle est évaluée à rhs.

L'enchaînement optionnel

· 5 minutes de lecture
Maya Armyanova ([@Zmayski](https://twitter.com/Zmayski)), briseuse d'enchaînements optionnels

Les longues chaînes d'accès aux propriétés en JavaScript peuvent être sujettes à des erreurs, car chacune d'entre elles peut s'évaluer à null ou undefined (aussi connues sous le nom de valeurs nulles). Vérifier l'existence des propriétés à chaque étape peut facilement se transformer en une structure profondément imbriquée avec des déclarations if ou une condition if longue répliquant la chaîne d'accès aux propriétés :

`globalThis`

· 2 minutes de lecture
Mathias Bynens ([@mathias](https://twitter.com/mathias))

Si vous avez déjà écrit du JavaScript pour une utilisation dans un navigateur web, vous avez peut-être utilisé window pour accéder au this global. Dans Node.js, vous avez peut-être utilisé global. Si vous avez écrit du code qui doit fonctionner dans les deux environnements, vous avez peut-être détecté lequel de ces éléments est disponible, puis utilisé celui-ci — mais la liste des identifiants à vérifier s'allonge avec le nombre d'environnements et de cas d'utilisation que vous souhaitez prendre en charge. Cela devient vite ingérable :

Promise combinators

· 5 minutes de lecture
Mathias Bynens ([@mathias](https://twitter.com/mathias))

Depuis l'introduction des promesses dans ES2015, JavaScript a pris en charge exactement deux combinateurs de promesses : les méthodes statiques Promise.all et Promise.race.

Deux nouvelles propositions sont actuellement en cours de standardisation : Promise.allSettled et Promise.any. Avec ces ajouts, il y aura un total de quatre combinateurs de promesses en JavaScript, chacun permettant différents cas d'utilisation.

`String.prototype.matchAll`

· 3 minutes de lecture
Mathias Bynens ([@mathias](https://twitter.com/mathias))

Il est courant d'appliquer à plusieurs reprises la même expression régulière sur une chaîne pour obtenir toutes les correspondances. Dans une certaine mesure, cela est déjà possible aujourd'hui en utilisant la méthode String#match.

Dans cet exemple, nous trouvons tous les mots constitués uniquement de chiffres hexadécimaux, puis nous enregistrons chaque correspondance :

const string = 'Nombres hex magiques : DEADBEEF CAFE';
const regex = /\b\p{ASCII_Hex_Digit}+\b/gu;
for (const match of string.match(regex)) {
console.log(match);
}

// Résultat :
//
// 'DEADBEEF'
// 'CAFE'

Cependant, cela ne vous donne que les sous-chaînes qui correspondent. Habituellement, vous ne voulez pas seulement les sous-chaînes, mais aussi des informations supplémentaires telles que l'index de chaque sous-chaîne ou les groupes capturés dans chaque correspondance.

Il est déjà possible de faire cela en écrivant votre propre boucle et en suivant vous-même les objets correspondants, mais cela peut être un peu irritant et pas très pratique :

const string = 'Nombres hex magiques : DEADBEEF CAFE';
const regex = /\b\p{ASCII_Hex_Digit}+\b/gu;
let match;
while (match = regex.exec(string)) {
console.log(match);
}

// Résultat :
//
// [ 'DEADBEEF', index: 19, input: 'Nombres hex magiques : DEADBEEF CAFE' ]
// [ 'CAFE', index: 28, input: 'Nombres hex magiques : DEADBEEF CAFE' ]

La nouvelle API String#matchAll rend cela plus facile que jamais : vous pouvez désormais écrire une simple boucle for-of pour obtenir tous les objets correspondants.

const string = 'Nombres hex magiques : DEADBEEF CAFE';
const regex = /\b\p{ASCII_Hex_Digit}+\b/gu;
for (const match of string.matchAll(regex)) {
console.log(match);
}

// Résultat :
//
// [ 'DEADBEEF', index: 19, input: 'Nombres hex magiques : DEADBEEF CAFE' ]
// [ 'CAFE', index: 28, input: 'Nombres hex magiques : DEADBEEF CAFE' ]

String#matchAll est particulièrement utile pour les expressions régulières avec des groupes de capture. Elle vous donne des informations complètes pour chaque correspondance individuelle, y compris les groupes capturés.

const string = 'Dépôts GitHub préférés : tc39/ecma262 v8/v8.dev';
const regex = /\b(?<owner>[a-z0-9]+)\/(?<repo>[a-z0-9\.]+)\b/g;
for (const match of string.matchAll(regex)) {
console.log(`${match[0]} at ${match.index} with '${match.input}'`);
console.log(`→ propriétaire : ${match.groups.owner}`);
console.log(`→ dépôt : ${match.groups.repo}`);
}

Exports de l'espace de noms des modules

· Une minute de lecture
Mathias Bynens ([@mathias](https://twitter.com/mathias))

Dans les modules JavaScript, il était déjà possible d'utiliser la syntaxe suivante :

import * as utils from './utils.mjs';

Cependant, aucune syntaxe d'exportation symétrique n'existait… jusqu'à maintenant :

export * as utils from './utils.mjs';

Cela équivaut à ce qui suit :

import * as utils from './utils.mjs';
export { utils };

BigInt : entiers à précision arbitraire en JavaScript

· 11 minutes de lecture
Mathias Bynens ([@mathias](https://twitter.com/mathias))

Les BigInt sont un nouveau type primitif numérique en JavaScript qui peuvent représenter des entiers avec une précision arbitraire. Avec les BigInt, vous pouvez stocker et manipuler en toute sécurité de grands entiers même au-delà de la limite des entiers sûrs pour les Number. Cet article examine quelques cas d'utilisation et explique les nouvelles fonctionnalités de Chrome 67 en comparant les BigInt aux Number en JavaScript.