[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Functions/Default_parameters [Back]  [Original]

Valeurs par dfaut des arguments - JavaScript | MDN

Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.

View in English Always switch to English

Valeurs par dfaut des arguments

Baseline Large disponibilit

Cette fonctionnalit est bien tablie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis septembre 2016.

Cette syntaxe permet d'initialiser des paramtres lors de l'appel de la fonction si aucune valeur n'est passe ou si c'est la valeur undefined qui est passe.

Dans cet article

Exemple interactif

function multiply(a, b = 1) {
  return a * b;
}

console.log(multiply(5, 2));
// Expected output: 10

console.log(multiply(5));
// Expected output: 5

Syntaxe

js
function [nom]([param1[ = valeurParDfaut1 ][, ..., paramN[ = valeurParDfautN ]]]) {
   instructions
}

Description

En JavaScript, par dfaut, la valeur des paramtres d'une fonction sera undefined. Malgr tout, il peut tre assez utile de pouvoir dfinir d'autres valeurs par dfaut.

Auparavant, pour dfinir une valeur par dfaut pour un paramtre, il fallait tester s'il valait undefined et lui affecter une valeur choisie le cas chant. Dans l'exemple qui suit, le paramtre b n'a pas de valeur fournie lors de l'appel, aussi si on avait utilis undefined dans la multiplication, la valeur retourne aurait t NaN. Aussi, dans la deuxime ligne du code, on prvoit ce cas :

js
function multiplier(a, b) {
  var b = typeof b !== "undefined" ? b : 1;

  return a * b;
}

multiplier(5, 2); // 10
multiplier(5, 1); // 5
multiplier(5); // 5

Grce aux paramtres par dfaut qui existent depuis ECMAScript 2015 (ES6), on peut se passer de cette vrification et allger le code de la fonction :

js
function multiplier(a, b = 1) {
  return a * b;
}

multiplier(5, 2); // 10
multiplier(5, 1); // 5
multiplier(5, undefined); // 5
multiplier(5); // 5

Exemples

Passer undefined en paramtre

Dans l'exemple qui suit, le deuxime appel la fonction fait explicitement appel undefined. La valeur par dfaut sera utilise, y compris dans ce cas (en revanche, ce ne serait pas vrai pour null ou les autres valeurs quivalentes false dans un contexte boolen).

js
function test(num = 1) {
  console.log(typeof num);
}

test(); // number (num vaut 1)
test(undefined); // number (num vaut 1 galement)
test(""); // string (num vaut "")
test(null); // object (num vaut null)

valuation l'appel

L'argument par dfaut est valu l'instant de l'appel. Ainsi, la diffrence d'autres langages comme Python, un nouvel objet est cr chaque appel de la fonction.

js
function append(valeur, tableau = []) {
  tableau.push(valeur);
  return tableau;
}

append(1); //[1]
append(2); //[2], et non [1, 2]

Cela est galement valable pour les fonctions et les variables

js
function appelQqc(truc = qqc()) {
  return truc;
}

appelQqc(); //lve une ReferenceError

let qqc = () => "machin";

appelQqc(); // "machin"

Les paramtres par dfaut sont disponibles la suite

Les paramtres dj rencontrs dans la dfinition peuvent tre utiliss comme paramtres par dfaut dans la suite de la dfinition :

js
function salutation(nom, salut, message = salut + " " + nom) {
  return [nom, salut, message];
}

salutation("David", "Coucou");
// ["David", "Coucou", "Coucou David"]

salutation("David", "Coucou", "Bon anniversaire !");
// ["David", "Coucou", "Bon anniversaire !"]

On peut utiliser cette fonctionnalit afin de grer beaucoup de cas aux limites :

js
function go() {
  return ":P";
}

function avecDfaut(
  a,
  b = 5,
  c = b,
  d = go(),
  e = this,
  f = arguments,
  g = this.value,
) {
  return [a, b, c, d, e, f, g];
}
function sansDfaut(a, b, c, d, e, f, g) {
  switch (arguments.length) {
    case 0:
      a;
    case 1:
      b = 5;
    case 2:
      c = b;
    case 3:
      d = go();
    case 4:
      e = this;
    case 5:
      f = arguments;
    case 6:
      g = this.value;
    default:
  }
  return [a, b, c, d, e, f, g];
}

avecDfaut.call({ value: "=^_^=" });
// [undefined, 5, 5, ":P", {value:"=^_^="}, arguments, "=^_^="]

sansDfaut.call({ value: "=^_^=" });
// [undefined, 5, 5, ":P", {value:"=^_^="}, arguments, "=^_^="]

Les fonctions dfinies dans le corps d'une fonction

partir de Gecko 33, les fonctions dclares dans le corps de la fonction ne peuvent pas servir comme valeurs par dfaut, cela lvera une exception ReferenceError (plus prcisment une TypeError avec SpiderMonkey, voir le bug Firefox 1022967). Les paramtres par dfaut sont excuts en premier, les dclarations de fonctions prsentes dans le corps de la fonction sont values ensuite.

js
// Ne fonctionnera pas, entrane une ReferenceError.
function f(a = go()) {
  function go() {
    return ":P";
  }
}

Utilisation de paramtres sans valeur par dfaut aprs les paramtres par dfaut

Avant Gecko 26, le code suivant aurait entran une exception SyntaxError. Cela a t corrig avec le bug Firefox 777060. Les paramtres sont toujours ordonns de gauche droite et les valeurs par dfaut sont surcharges s'ils viennent avant les autres paramtres :

js
function f(x = 1, y) {
  return [x, y];
}

f(); // [1, undefined]
f(2); // [2, undefined]

Paramtre par dfaut et dcomposition des paramtres

Il est possible d'utiliser les valeurs par dfaut avec la syntaxe de dcomposition :

js
function f([x, y] = [1, 2], { z: z } = { z: 3 }) {
  return x + y + z;
}

f(); // 6

Spcifications

Spcification
ECMAScript 2027 LanguageSpecification
# sec-function-definitions

Compatibilit des navigateurs

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page