Paramètre par défaut en JavaScript : une valeur de repli déclarée dans la signature

Un paramètre par défaut fournit une valeur quand l'argument est absent ou vaut undefined. La signature devient lisible, le corps se simplifie.
3 min de lecture
Believemy logo

Avant, une fonction commençait souvent par trois lignes de vérification : si cet argument manque, mettre telle valeur. Ces lignes n'apportaient rien et masquaient le vrai travail.

Les paramètres par défaut déplacent cette information là où elle est utile : dans la signature, visible dès la première lecture et par les outils.


Définition

Un paramètre par défaut est une valeur écrite après un signe égal dans la liste des paramètres. Elle est utilisée quand l'argument correspondant est absent ou vaut explicitement undefined.

JAVASCRIPT
function saluer(nom = "visiteur", ponctuation = "!") {
  return "Bonjour " + nom + ponctuation;
}

console.log(saluer());                 // Bonjour visiteur!
console.log(saluer("Ada"));            // Bonjour Ada!
console.log(saluer(undefined, "..."));  // Bonjour visiteur...
console.log(saluer(null));             // Bonjour null!

La dernière ligne est le point à retenir : null est une valeur, donc le défaut ne s'applique pas.


Ce qui déclenche le défaut, et ce qui ne le déclenche pas

Ce tableau à deux colonnes lève le doute une fois pour toutes.

Argument passéLe défaut s'applique
AucunOui
undefinedOui
nullNon
0, "", falseNon

C'est exactement le comportement de la Coalescence des nuls (??) restreint à undefined, et non celui d'un || qui écraserait aussi les valeurs falsy. Voir Truthy et falsy.


Deux comportements qui rendent service

Un défaut est évalué à chaque appel, et il peut s'appuyer sur les paramètres déclarés avant lui.

JAVASCRIPT
function creerLien(base, chemin = "/", url = base + chemin) {
  return url;
}

console.log(creerLien("https://believemy.com"));        // https://believemy.com/
console.log(creerLien("https://believemy.com", "/fr")); // https://believemy.com/fr

function ajouter(article, panier = []) {
  panier.push(article);
  return panier;
}

console.log(ajouter("clavier").length); // 1
console.log(ajouter("souris").length);  // 1, un tableau neuf à chaque appel
Bon à savoir

Ce second point évite un piège connu dans d'autres langages, où un tableau par défaut est créé une seule fois et se remplit d'un appel à l'autre. En JavaScript, chaque appel reçoit une valeur neuve.


Questions fréquentes

Question

Peut-on donner un défaut à un objet déstructuré ?

Oui, et c'est l'usage le plus confortable pour une fonction à options. Écrire function config({ theme = "clair" } = {}) donne un défaut à chaque champ, et le = {} final permet d'appeler la fonction sans aucun argument. Voir Destructuration pour la syntaxe complète.


Question

Un paramètre par défaut peut-il être une fonction ?

Oui, n'importe quelle expression convient, y compris un appel de fonction. Elle n'est évaluée que si l'argument manque, ce qui évite un calcul inutile dans le cas courant. Attention toutefois à ne pas y cacher un Effet de bord : la signature n'est pas l'endroit où on s'attend à en trouver.


Question

Faut-il placer les paramètres avec défaut en dernier ?

C'est fortement recommandé. Un défaut placé avant un paramètre obligatoire oblige l'appelant à écrire undefined pour le sauter, ce qui est illisible. Rangez les paramètres du plus obligatoire au plus optionnel, ou regroupez les options dans un seul objet.

Termes connexes

Découvrez notre glossaire JavaScript

Tous les mots de JavaScript expliqués simplement : mots-clés, objets natifs, méthodes, erreurs et concepts. Définitions claires et exemples qui tournent, pour apprendre et pour se dépanner.

Partager cet article

Tu veux nous aider ? Fais un lien vers cet article sur tes réseaux ou encore mieux : sur ton site, dans un article ou dans ta newsletter.