Paramètre du reste (...rest)

Rassemble tous les arguments restants d’une fonction dans un véritable tableau. Vous l’écrivez comme ...nom à la fin de la liste.

Sur cette page

Exemple

#
JavaScript
function totalPoints(...scores) {
  return scores.reduce((sum, score) => sum + score, 0)
}

console.log(totalPoints(10, 20, 30))
console.log(totalPoints(5))
console.log(totalPoints())
Console
60
5
0

Définition et utilisation

#

Vous écrivez le paramètre du reste comme trois points avant le nom du dernier paramètre : function sum(...numbers). Tous les arguments qui ne sont pas allés dans les paramètres précédents y atterrissent comme un tableau normal. Quand il n’y a pas de tels arguments, le tableau est vide, et non undefined.

Cela permet d’écrire facilement une fonction qui accepte un nombre quelconque de valeurs : additionner des points, assembler des noms de classes CSS ou enregistrer un événement avec des données supplémentaires. C’est un véritable tableau, donc vous disposez immédiatement de map(), reduce() et length.

Le paramètre du reste doit être le dernier et il ne peut y en avoir qu’un seul. Il remplace l’ancien objet arguments, qui n’est pas un tableau et n’existe pas dans les fonctions fléchées. Les mêmes trois points lors de l’appel d’une fonction, fn(...array), désignent le spread, c’est-à-dire l’opération inverse : décomposer un tableau en arguments séparés.

Syntaxe

#
Syntaxe
function name(...rest) {}
function name(first, second, ...rest) {}
const fn = (...args) => {}

Plus d’exemples

#
Un paramètre fixe et le reste
JavaScript
function logEvent(type, ...details) {
  console.log(type, details.length, details)
}

logEvent('leçon', 'CSS', 'Grid')
logEvent('connexion')
Console
leçon 2 ['CSS', 'Grid']
connexion 0 []
Rest et spread
JavaScript
function maxScore(...scores) {
  return Math.max(...scores)
}

const results = [72, 95, 88]

console.log(maxScore(...results))
console.log(maxScore(40, 60))
Console
95
60

Dans la définition, ...scores rassemble les arguments dans un tableau (rest), et dans l’appel, Math.max(...scores) décompose le tableau en arguments séparés (spread).

À la place de l’ancien objet arguments
JavaScript
function oldStyle() {
  console.log(Array.isArray(arguments), arguments.length)
}

function newStyle(...args) {
  console.log(Array.isArray(args), args.length)
}

oldStyle('a', 'b')
newStyle('a', 'b')
Console
false 2
true 2

Compatibilité des navigateurs

#

Largement disponible

Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.

  • Chrome
  • Edge
  • Firefox
  • Safari

Bonnes pratiques

#
  • Le paramètre du reste est toujours à la fin. L’écriture function fn(...items, last) est une erreur de syntaxe.
  • N’utilisez pas arguments dans du nouveau code. Le paramètre du reste donne un véritable tableau et fonctionne aussi dans les fonctions fléchées.
  • Quand une fonction accepte de nombreux réglages optionnels de types différents, un seul objet d’options avec déstructuration est plus lisible qu’une longue liste d’arguments.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.