Qu'est-ce que l'objet des arguments en Node.js

Comment faire pour lister le nombre de paramètres passées dans une fonction ? Une traduction de l'article What is the arguments object?

Classé dans Conventions JavaScript

Traduction

L'objet arguments est une construction spéciale disponible dans tous les appels de fonction. Il représente la liste des arguments qui ont été transmis lors de l'appel de la fonction. Puisque JavaScript permet d'appeler des fonctions avec un nombre quelconque d'arguments, nous avons besoin d'un moyen de les découvrir et d'y accéder de manière dynamique.

L'objet arguments est un objet de type tableau. Il possède une propriété de longueur qui correspond au nombre d'arguments passés dans la fonction. Vous pouvez accéder à ces valeurs en indexant dans le tableau, par exemple arguments[0] est le premier argument. La seule autre propriété des arguments est callee, que ES5 interdit d'utiliser en mode strict ; vous trouverez plus d'informations à ce sujet ici. Voici un exemple qui illustre la propriété arguments.

const myfunc = function(one) {
  arguments[0] === one;
  arguments[1] === 2;
  arguments.length === 3;
}

myfunc(1, 2, 3);

Cette construction est très utile et donne aux fonctions JavaScript beaucoup de flexibilité. Mais il y a un problème important. L'objet arguments se comporte comme un tableau, mais ce n'est pas un tableau réel. Il n'a pas Array dans sa chaîne de prototypes et il ne répond à aucune méthode de tableau, par exemple arguments.sort() soulève une TypeError. Au lieu de cela, vous devez d'abord copier les valeurs dans un véritable tableau. Avec l'arrivée de la méthode ES6 Array.from(), c'est assez simple.

const myfunc = function(a, b, c) {
  const args = Array.from(arguments);
  console.log(args) // [1, 2, 3]
}

myfunc(1, 2, 3);

REMARQUE : Pour les versions ES5 et inférieures, une boucle for normale peut faire l'affaire.

Dans certains cas, vous pouvez toujours traiter arguments comme un tableau. Vous pouvez utiliser arguments dans les invocations de fonctions dynamiques en utilisant apply. Et la plupart des méthodes Array natives acceptent également arguments lorsqu'elles sont invoquées dynamiquement à l'aide de call ou de apply. Cette technique suggère également un autre moyen de convertir arguments en un véritable tableau à l'aide de la méthode Array.slice.

myfunc.apply(obj, arguments).

// concatène les arguments sur le
Array.prototype.concat.apply([1,2,3], arguments);

// transformer les arguments en un véritable tableau
const args = Array.prototype.slice.call(arguments);

// couper le premier argument
args = Array.prototype.slice.call(arguments, 1);

Objet des arguments dans la fonction flèché

Les fonctions flèches ont été ajoutées dans la spécification ECMAScript 2015 (ES6) comme une alternative syntaxiquement compacte à une expression de fonction régulière. Un inconvénient de cette nouvelle alternative est l'absence de l'objet arguments (et des mots-clés this, super, et new.target). Une solution de contournement pour de tels cas est l'utilisation du paramètre de reste. Le paramètre de reste vous permet de représenter un nombre indéfini d'arguments sous forme de tableau. Pour plus de détails, lisez ici.

const myfunc = (...args) => {
  console.log('le premier paramètre est ', args[0]);
}

myfunc(1, 2, 3);

Lire dans une autre langue