Une fonction JavaScript peut-elle accepter 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" bizarre que vous pouvez référencer appelée "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 consiste à en obtenir les valeurs dans un tableau réel :
function foo() {
var args = Array.prototype.slice.call(arguments, 0);
// ...
Dans cet exemple, "args" serait un tableau normal, sans aucune bizarrerie. Il y a toutes sortes de problèmes désagréables avec les "arguments", et dans ECMAScript 5 sa fonctionnalité sera réduite.
edit - bien que l'utilisation de la fonction .slice()
soit pratique, il s'avère que passer l'objet arguments
hors de une fonction provoque des maux de tête pour l'optimisation, à tel point que les fonctions qui le font peuvent ne pas être optimisées du tout. La manière simple et directe de transformer arguments
en tableau est donc
function foo() {
var args = [];
for (var i = 0; i < arguments.length; ++i) args[i] = arguments[i];
// ...
}
Depuis ECMAScript 2015 (ou ES6), nous avons également accès à paramètres de repos qui nous donnent un moyen légèrement plus propre de 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 d'écrire ces lignes, cela est pris en charge par Chrome 47+, Firefox 15+ et Edge. La fonctionnalité est également disponible via les deux Babel et TypeScript transpiler vers ES5.
Avec ECMAScript 6, vous pouvez utiliser le reste de la syntaxe des arguments:
const testArray = (...args) => {
console.log(args);
};
testArray(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
function toArray() {
return arguments;
}
var myargs = toArray(1, 2, 3, 4, 5, 6);
Le mot clé arguments
est disponible dans toutes les fonctions js
var arr = [];
function testArray() {
Array.prototype.Push.apply(arr, arguments);
}
Il existe des méthodes héritées, mais je préfère le ES6
et versions plus récentes, donc si je veux implémenter cela, je l'ai écrit comme ci-dessous:
const func = ...arg => console.log(arg);
Une technologie simple et à la pointe de la technologie.
Vous pouvez également le "lancer", ce qui vous évite la boucle laide:
var getArguments = function() {
return arguments;
};
var foo = getArguments(1,2,3,4);
// console.log(foo.slice()); => TypeError: foo.slice is not a function
var foo = Object.values(foo);
console.log(foo); // => [ 1, 2, 3, 4 ]
foo.Push(5);
console.log(foo); // => [ 1, 2, 3, 4, 5 ]
Javascript ES5
function testArray(){
for(index = 0; index < arguments.length; i++) {
alert(arguments[index])
}
}
Javascript ES6
const testArray = (...arg) => console.log(arg)