Arguments illimités dans une fonction JavaScript

Une fonction JavaScript peut-elle prendre des arguments illimités? Quelque chose comme ça:

testArray(1, 2, 3, 4, 5...); 

J'essaie:

 var arr = []; function testArray(A) { arr.push(A); } 

Mais cela ne fonctionne pas (la sortie n'est que le premier argument). Ou la seule façon est:

 function testArray(a, b, c, d, e...) { } 

Merci

Il y a une variable "magique" étrange que vous pouvez appeler "arguments":

 function manyArgs() { for (var i = 0; i < arguments.length; ++i) alert(arguments[i]); } 

C'est comme un tableau, mais ce n'est pas un tableau. En fait, c'est tellement bizarre que vous ne devriez vraiment pas l'utiliser beaucoup du tout. Une pratique courante est d'obtenir les valeurs de celui-ci en un véritable tableau:

 function foo() { var args = Array.prototype.slice.call(arguments, 0); // ... 

Dans cet exemple, "args" serait un tableau normal, sans aucune rareté. Il y a toutes sortes de problèmes méchants avec les «arguments», et dans ECMAScript 5, sa fonctionnalité sera réduite.

.slice() – bien que l'utilisation de la fonction .slice() soit pratique, il s'avère que passer l'objet arguments hors d'une fonction provoque des maux de tête pour l'optimisation, de sorte que les fonctions qui le font peuvent ne pas être optimisées du tout. Le moyen simple et direct de transformer les arguments en un tableau est donc

 function foo() { var args = []; for (var i = 0; i < arguments.length; ++i) args[i] = arguments[i]; // ... } 

En savoir plus sur les arguments et l'optimisation.

À partir de ECMAScript 2015 (ou ES6), nous avons également accès aux paramètres de repos qui nous donnent un moyen légèrement plus propre à gérer les arguments:

 function foo(a, b, ...others) { console.log("a and b are ", a, b); for (let val of others) { console.log(val); } } foo(1, 2, 3, 4, 5); 

Au moment de l'écriture, cela est pris en charge par Chrome 47+, Firefox 15+ et Edge. La fonctionnalité est également disponible via Babel et TypeScript transpiling vers ES5.

 var arr = []; function testArray() { Array.prototype.push.apply(arr, arguments); } 
 function toArray() { return arguments; } var myargs = toArray(1, 2, 3, 4, 5, 6); 

Le mot-clé des arguments est disponible dans chaque fonction js

Avec ECMAScript 6, vous pouvez utiliser la syntaxe du reste des arguments:

 const testArray = (...args) => { console.log(args); }; testArray(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);