Dans PHP il y a func_num_args
et func_get_args
, y a-t-il quelque chose de similaire pour JavaScript?
Utilisez arguments
. Vous pouvez y accéder comme un tableau. Utilisez arguments.length
pour le nombre d'arguments.
Arguments est un objet de type tableau (pas un tableau réel). Exemple de fonction ...
function testArguments () // <-- notice no arguments specified
{
console.log(arguments); // outputs the arguments to the console
var htmlOutput = "";
for (var i=0; i < arguments.length; i++) {
htmlOutput += '<li>' + arguments[i] + '</li>';
}
document.write('<ul>' + htmlOutput + '</ul>');
}
Essaye le...
testArguments("This", "is", "a", "test"); // outputs ["This","is","a","test"]
testArguments(1,2,3,4,5,6,7,8,9); // outputs [1,2,3,4,5,6,7,8,9]
Détails complets: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Functions_and_function_scope/arguments
L'objet arguments
est l'endroit où les arguments des fonctions sont stockés.
L'objet arguments agit et ressemble à un tableau. En fait, il n'a pas les méthodes utilisées par les tableaux, par exemple:
Array.forEach(callback[, thisArg]);
Array.map(callback[, thisArg])
Array.filter(callback[, thisArg]);
Array.indexOf(searchElement[, fromIndex])
Je pense que la meilleure façon de convertir un objet arguments
en un tableau real est la suivante:
argumentsArray = [].slice.apply(arguments);
Cela en fera un tableau;
réutilisable:
function ArgumentsToArray(args) {
return [].slice.apply(args);
}
(function() {
args = ArgumentsToArray(arguments);
args.forEach(function(value) {
console.log('value ===', value);
});
})('name', 1, {}, 'two', 3)
résultat:
>
value === name
>value === 1
>value === Object {}
>value === two
>value === 3
ES6 autorise une construction dans laquelle un argument de fonction est spécifié avec une notation "..." telle que
function testArgs (...args) {
// Where you can test picking the first element
console.log(args[0]);
}
Vous pouvez également le convertir en tableau si vous préférez. Si les génériques Array sont disponibles:
var args = Array.slice(arguments)
Autrement:
var args = Array.prototype.slice.call(arguments);
à partir de Mozilla MDN :
Vous ne devez pas couper les arguments car cela empêche les optimisations dans Moteurs JavaScript (V8 par exemple).
Comme beaucoup d'autres l'ont fait remarquer, arguments
contient tous les arguments passés à une fonction.
Si vous voulez appeler une autre fonction avec les mêmes arguments, utilisez apply
Exemple:
var is_debug = true;
var debug = function() {
if (is_debug) {
console.log.apply(console, arguments);
}
}
debug("message", "another argument")
Oui, si vous ne savez pas combien d'arguments sont possibles au moment de la déclaration d'une fonction, vous pouvez alors déclarer la fonction sans paramètre et accéder à toutes les variables par un tableau d'arguments transmis au moment de l'appel de la fonction.
Réponse similaire à Gunnar, avec un exemple plus complet: Vous pouvez même renvoyer de manière transparente le tout:
function dumpArguments(...args) {
for (var i = 0; i < args.length; i++)
console.log(args[i]);
return args;
}
dumpArguments("foo", "bar", true, 42, ["yes", "no"], { 'banana': true });
Sortie:
foo
bar
true
42
["yes","no"]
{"banana":true}
Dans ES6, vous pouvez faire quelque chose comme ceci:
function foo(...args)
{
let [a,b,...c] = args;
console.log(a,b,c);
}
foo(1, null,"x",true, undefined);