Aller au contenu principal

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.

Variable `catch` facultative

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

La clause catch des instructions try nécessitait un paramètre :

try {
faireQuelqueChoseQuiPeutJeterErreur();
} catch (exception) {
// ^^^^^^^^^
// Nous devons nommer le paramètre, même si nous ne l'utilisons pas !
gérerException();
}

En ES2019, catch peut maintenant être utilisé sans paramètre. Cela est utile si vous n’avez pas besoin de l’objet exception dans le code qui gère l’exception.

try {
faireQuelqueChoseQuiPeutJeterErreur();
} catch { // → Pas de paramètre !
gérerException();
}

Prise en charge de la variable catch facultative

`String.prototype.trimStart` et `String.prototype.trimEnd`

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

ES2019 introduit String.prototype.trimStart() et String.prototype.trimEnd() :

const string = '  bonjour le monde  ';
string.trimStart();
// → 'bonjour le monde '
string.trimEnd();
// → ' bonjour le monde'
string.trim(); // ES5
// → 'bonjour le monde'

Cette fonctionnalité était auparavant disponible via les méthodes non standard trimLeft() et trimRight(), qui restent comme alias des nouvelles méthodes pour la compatibilité ascendante.

const string = '  bonjour le monde  ';
string.trimStart();
// → 'bonjour le monde '
string.trimLeft();
// → 'bonjour le monde '
string.trimEnd();
// → ' bonjour le monde'
string.trimRight();
// → ' bonjour le monde'
string.trim(); // ES5
// → 'bonjour le monde'

`Promise.prototype.finally`

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

Promise.prototype.finally permet d'enregistrer un callback qui sera invoqué une fois qu'une promesse est réglée (c'est-à-dire résolue ou rejetée).

Imaginez que vous voulez récupérer des données pour les afficher sur la page. Oh, et vous voulez montrer un indicateur de chargement lorsque la requête commence et le cacher lorsque la requête se termine. En cas de problème, vous affichez un message d'erreur à la place.

const fetchAndDisplay = ({ url, element }) => {
showLoadingSpinner();
fetch(url)
.then((response) => response.text())
.then((text) => {
element.textContent = text;
hideLoadingSpinner();
})
.catch((error) => {
element.textContent = error.message;
hideLoadingSpinner();
});
};

`Intl.PluralRules`

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

Iñtërnâtiônàlizætiøn est difficile. La gestion des pluriels est l'un des nombreux problèmes qui peuvent sembler simples, jusqu'à ce que vous réalisiez que chaque langue a ses propres règles de pluralisation.

Pour la pluralisation en anglais, il n'y a que deux résultats possibles. Prenons le mot « chat » comme exemple :

  • 1 chat, c'est-à-dire la forme 'one', connue comme le singulier en anglais
  • 2 chats, mais aussi 42 chats, 0,5 chats, etc., c'est-à-dire la forme 'other' (la seule autre), connue comme le pluriel en anglais.

La toute nouvelle API Intl.PluralRules vous indique quelle forme s'applique dans une langue de votre choix en fonction d'un nombre donné.

const pr = new Intl.PluralRules('en-US');
pr.select(0); // 'other' (par ex. '0 chats')
pr.select(0.5); // 'other' (par ex. '0,5 chats')
pr.select(1); // 'one' (par ex. '1 chat')
pr.select(1.5); // 'other' (par ex. '0,5 chats')
pr.select(2); // 'other' (par ex. '0,5 chats')

Propriétés rest et spread des objets

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

Avant de discuter des propriétés rest et spread des objets, faisons un petit retour en arrière pour nous rappeler une fonctionnalité très similaire.

Éléments rest et spread des tableaux dans ES2015

Le bon vieux ECMAScript 2015 a introduit les éléments rest pour l'affectation par déstructuration des tableaux et les éléments spread pour les littéraux de tableaux.

// Éléments rest pour l'affectation par déstructuration des tableaux :
const primes = [2, 3, 5, 7, 11];
const [first, second, ...rest] = primes;
console.log(first); // 2
console.log(second); // 3
console.log(rest); // [5, 7, 11]

// Éléments spread pour les littéraux de tableaux :
const primesCopy = [first, second, ...rest];
console.log(primesCopy); // [2, 3, 5, 7, 11]

ES2018 : propriétés rest et spread des objets 🆕

Quoi de neuf alors ? Eh bien, une proposition permet également les propriétés rest et spread pour les littéraux d'objets.

// Propriétés rest pour l'affectation par déstructuration des objets :
const person = {
firstName: 'Sebastian',
lastName: 'Markbåge',
country: 'USA',
state: 'CA',
};
const { firstName, lastName, ...rest } = person;
console.log(firstName); // Sebastian
console.log(lastName); // Markbåge
console.log(rest); // { country: 'USA', state: 'CA' }