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

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

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 juillet 2015.

* Certaines parties de cette fonctionnalit peuvent bnficier de prise en charge variables.

L'objet arguments est un objet, semblable un tableau, correspondant aux arguments passs une fonction.

Note : Si vous pouvez utiliser les fonctionnalits ECMAScript 2015/ES6, il est prfrable de manipuler les arguments avec les paramtres du reste.

Note : Par objet semblable un tableau , on indique que l'objet arguments possde une proprit length et que ses proprits sont indexes partir de 0 mais qu'il ne possde aucune des mthodes natives de Array telles que forEach() et map().

Dans cet article

Exemple interactif

function func1(a, b, c) {
  console.log(arguments[0]);
  // Expected output: 1

  console.log(arguments[1]);
  // Expected output: 2

  console.log(arguments[2]);
  // Expected output: 3
}

func1(1, 2, 3);

Note : Variable ayant la fonction pour porte correspond la traduction de Variable of the function scope qu'il serait incorrect de traduire par Variable de la porte de la fonction car la porte de la fonction est la porte dans laquelle on peut appeler la fonction. Une variable locale de la fonction pourrait quant elle avoir une porte strictement incluse dans le corps de la fonction (variable dfinie dans un bloc de la fonction mme si cette subtilit n'existe pas en Javascript). Toute suggestion pour viter cette tournure un peu longue sans altrer le sens est la bienvenue. (variable intrinsque)

Syntaxe

js
arguments;

Description

L'objet arguments est une variable locale (intrinsque et inhrente aux fonctions) disponible dans toutes les fonctions (qui ne sont pas des fonctions flches).

Vous pouvez accder aux arguments d'une fonction l'intrieur de celle-ci en utilisant l'objet arguments. Cet objet contient une entre pour chaque argument pass la fonction, l'indice de la premire entre commenant 0. Par exemple, si une fonction est appele avec trois arguments, on accde ceux-ci comme suit :

js
arguments[0];
arguments[1];
arguments[2];

Les arguments peuvent aussi tre modifis :

js
arguments[1] = "nouvelle valeur";

Type de l'objet arguments et liens avec Array

L'objet arguments n'est pas un Array. Il est similaire un Array, mais il n'a pas les proprits d'un Array, excepte la proprit length. Par exemple, il n'a pas la mthode pop(). Nanmoins, il peut tre converti en un vrai objet de type Array :

js
console.log(typeof arguments); // 'object'
var args = Array.prototype.slice.call(arguments);

// Avec ECMAScript 2015 / ES6
var args = Array.from(arguments);

Utilisation de la dcomposition avec les arguments

On peut utiliser la mthode Array.from() ou encore l'oprateur de dcomposition afin de convertir cet objet en un vrai Array :

js
var args = Array.from(arguments);
var args = [...arguments];

Attention : Il est dconseill d'utiliser slice sur les arguments car cela peut empcher certaines optimisations des moteurs JavaScript. Pour ce scnario, on peut par exemple construire un nouveau tableau en parcourant l'objet arguments ( ce sujet, voir cette page sur les contraintes d'optimisations lies V8). Pour cet exemple, on pourra utiliser Array.apply :

js
var args =
  arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments);

L'objet arguments est disponible uniquement dans le corps d'une fonction. Tenter d'accder l'objet arguments en dehors de la dclaration d'une fonction renvoie une erreur.

Vous pouvez utiliser l'objet arguments si vous appelez une fonction avec plus de paramtres que ceux dclars dans sa signature. Cette technique est utile pour les fonctions qui acceptent un nombre variable d'arguments. Vous pouvez utiliser arguments.length pour dterminer le nombre de paramtres passs la fonction, puis utiliser chaque argument en utilisant l'objet arguments. (Pour dterminer le nombre d'arguments dclars la dfinition de la fonction, il faut utiliser la proprit length.)

Utiliser typeof sur arguments

L'oprateur typeof renvoie "object" lorsqu'on l'utilise sur arguments

js
console.log(typeof arguments); // "object"

On peut tout fait utiliser typeof sur chacun des arguments afin de connatre leur type respectif

js
console.log(typeof arguments[0]); // renvoie le type du premier argument

Proprits

arguments.callee

Rfrence la fonction en cours d'excution.

arguments.caller

Rfrence la fonction appelante.

arguments.length

Rfrence au nombre d'arguments passs la fonction.

arguments[@@iterator]

Renvoie un nouvel itrateur qui contient les valeurs pour chaque indice d'arguments.

Exemples

Dfinir une fonction de concatnation d'un nombre variable de chanes

Cet exemple dfinit une fonction qui concatne un nombre variable de chanes. Le seul argument formel de la fonction est une chane spcifiant un sparateur insr entre les chanes concatnes. La fonction est dfinie comme suit :

js
function myConcat(separateur) {
  var args = Array.prototype.slice.call(arguments, 1);
  return args.join(separateur);
}

Vous pouvez passer n'importe quel nombre d'arguments cette fonction ; elle crera une liste en utilisant chaque argument comme un lment de la liste.

js
// renvoie "rouge, orange, bleu"
myConcat(", ", "rouge", "orange", "bleu");

// renvoie "lphant ; giraffe ; lion ; gupard"
myConcat(" ; ", "elephant", "giraffe", "lion", "gupard");

Dfinir une fonction de cration de listes HTML

Cet exemple dfinit une fonction qui cre des chanes dfinissant des listes HTML. Le seul argument formel de la fonction est une chane pouvant valoir "u" (unordered), si la liste doit tre sans numrotation (avec des puces), ou "o" (ordered), si la liste doit tre numrote. La fonction est dfinie comme suit :

js
function liste(type) {
  var resultat = "<" + type + "l><li>";
  var args = Array.prototype.slice.call(arguments, 1);
  resultat += args.join("</li><li>");
  resultat += "</li></" + type + "l>"; // end list

  return resultat;
}

Vous pouvez passer n'importe quel nombre d'arguments cette fonction ; elle crera une liste du type indiqu en ajoutant chaque argument comme lment dans la liste. Exemple :

js
var listeHTML = liste("u", "Un", "Deux", "Trois");

/* listeHTML vaut &nbsp;:

"<ul><li>Un</li><li>Deux</li><li>Trois</li></ul>"

*/

Paramtres du reste, paramtres par dfaut et dcomposition

L'objet arguments peut tre utilis en combinaison avec les paramtres du reste, les paramtres par dfaut ou les paramtres dcomposs.

js
function toto(...args) {
  return args;
}
toto(1, 2, 3); // [1, 2, 3]

Toutefois, pour les fonctions utilises en mode non-strict, un objet arguments n'est fourni l'intrieur de la fonction uniquement si celle-ci n'utilise pas de paramtres du reste, pas de paramtres par dfaut ou de paramtre dcompos. Par exemple, dans la fonction suivante, qui utilise un paramtre par dfaut, ce sera 10 qui sera renvoy (et non 100) :

js
function truc(a = 1) {
  arguments[0] = 100;
  return a;
}
truc(10); // 10

Si l'objet arguments est modifi dans la fonction, cela modifiera la valeur du paramtre pass. Dans cet exemple o il n'y a ni paramtres du reste, ni paramtres par dfaut, ni dcomposition, le rsultat sera 100 :

js
fonction truc(a) {
  arguments[0] = 100;
  return a;
}
truc(10); // 100

En fait, lorsqu'il n'y a aucun paramtre du reste, paramtre par dfaut ou aucune dcomposition, les arguments formels feront rfrences aux valeurs de l'objet arguments. Lorsqu'on aura besoin d'accder ces valeurs, on accdera aux valeurs contenues dans arguments et l'inverse, lorsqu'on modifiera ces valeurs, cela modifiera le contenu d'arguments. Par exemple

js
function func(a, b) {
  arguments[0] = 99;
  arguments[1] = 99;
  console.log(a + " " + b);
}

func(1, 2); // 99 99

ou encore :

js
function func(a, b) {
  a = 9;
  b = 99;
  console.log(arguments[0] + " " + arguments[1]);
}

func(3, 4); // 9 99

En revanche, ds qu'on utilise des paramtres du reste, des paramtres par dfaut ou la dcomposition, c'est le comportement normal qui sera appliqu :

js
function func(a, b, c = 9) {
  arguments[0] = 99;
  arguments[1] = 98;
  console.log(a + " " + b);
}

func(3, 4); // 3 4

Spcifications

Spcification
ECMAScript 2027 LanguageSpecification
# sec-arguments-exotic-objects

Compatibilit des navigateurs

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page