Il existe deux méthodes à partir de ES2015.
Cet objet est intégré aux fonctions et fait référence, de manière appropriée, aux arguments d'une fonction. Cependant, ce n'est pas techniquement un tableau, donc les opérations typiques du tableau ne fonctionneront pas dessus. La méthode suggérée consiste à utiliser Array.fromou l'opérateur spread pour créer un tableau à partir de celui-ci.
J'ai vu d'autres réponses mentionner l'utilisation slice. Ne fais pas ça. Il empêche les optimisations (source: MDN ).
Array.from(arguments)
[...arguments]
Cependant, je dirais que argumentsc'est problématique car cela masque ce qu'une fonction accepte comme entrée. Une argumentsfonction s'écrit généralement comme ceci:
function mean(){
let args = [...arguments];
return args.reduce((a,b)=>a+b) / args.length;
}
Parfois, l'en-tête de la fonction est écrit comme suit pour documenter les arguments à la manière du C:
function mean(/* ... */){ ... }
Mais c'est rare.
Quant à savoir pourquoi c'est problématique, prenez C, par exemple. C est rétrocompatible avec un ancien dialecte pré-ANSI du langage connu sous le nom de K&R C. K&R C permet aux prototypes de fonctions d'avoir une liste d'arguments vide.
int myFunction();
/* This function accepts unspecified parameters */
ANSI C fournit une fonctionnalité pour varargs( ...), et voidpour spécifier une liste d'arguments vide.
int myFunction(void);
/* This function accepts no parameters */
Beaucoup de gens déclarent par inadvertance des fonctions avec une unspecifiedliste d'arguments ( int myfunction();), alors qu'ils s'attendent à ce que la fonction n'accepte aucun argument. Ce qui est techniquement un bug car la fonction va accepter des arguments. N'importe quel nombre d'entre eux.
Une varargsfonction propre en C prend la forme:
int myFunction(int nargs, ...);
Et JavaScript a en fait quelque chose de similaire à cela.
Je vous ai déjà montré l'opérateur de diffusion, en fait.
...name
Il est assez polyvalent et peut également être utilisé dans la liste d'arguments d'une fonction ("paramètres de repos") pour spécifier des varargs d'une manière bien documentée:
function mean(...args){
return args.reduce((a,b)=>a+b) / args.length;
}
Ou comme une expression lambda:
((...args)=>args.reduce((a,b)=>a+b) / args.length)(1,2,3,4,5); // 3
Je préfère de loin l'opérateur de propagation. C'est propre et auto-documenté.
for - inboucle avec l'argumentsobjet - une boucle `` normale '' pour itérer sur lalengthpropriété doit être utilisée à la place