En PHP, il existe func_num_args
et func_get_args
existe-t-il quelque chose de similaire pour JavaScript?
217
En PHP, il existe func_num_args
et func_get_args
existe-t-il quelque chose de similaire pour JavaScript?
function
, pas pour les=>
fonctions de flèche ES2015 + . Pour ceux -ci , vous voulez utiliser...args
dans la définition de la fonction comme ceci:(...args) => console.log(args)
.Les arguments sont un objet de type tableau (pas un tableau réel). Exemple de fonction ...
Essaye le...
Les détails complets: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Functions_and_function_scope/arguments
la source
ES6 autorise une construction dans laquelle un argument de fonction est spécifié avec une notation "..." telle que
la source
a = () => {console.log(arguments);}; a('foo');
donne-- Uncaught ReferenceError: arguments is not defined
Cependanta = (...args) => {console.log(args);}; a('foo');
donne["foo"]
le
arguments
objet est l'endroit où les arguments des fonctions sont stockés.L'objet arguments agit et ressemble à un tableau, il l'est fondamentalement, il n'a tout simplement pas les méthodes utilisées par les tableaux, par exemple:
Array.forEach(callback[, thisArg]);
Array.map(callback[, thisArg])
Array.filter(callback[, thisArg]);
Array.slice(begin[, end])
Array.indexOf(searchElement[, fromIndex])
Je pense que la meilleure façon de convertir un
arguments
objet en un vrai tableau est la suivante:Cela en fera un tableau;
réutilisable:
résultat:
la source
[].slice.apply(arguments);
ne peut pas être le meilleur moyen car il provoque une allocation de tableau vide inutile.Vous pouvez également le convertir en tableau si vous préférez. Si des génériques de tableau sont disponibles:
Autrement:
de Mozilla MDN :
la source
function foo() { foo.bar = JSON.stringify(arguments); foo.baz = JSON.parse(foo.bar); }
si la conservation est nécessaire au lieu de la stringification, utilisez l' algorithme de clonage structuré interne . Si des nœuds DOM sont passés, utilisez XMLSerializer comme dans une question non liée .with (new XMLSerializer()) {serializeToString(document.documentElement) }
Comme beaucoup d'autres l'ont souligné,
arguments
contient tous les arguments passés à une fonction.Si vous souhaitez appeler une autre fonction avec les mêmes arguments, utilisez
apply
Exemple:
la source
Réponse similaire à Gunnar, avec un exemple plus complet: vous pouvez même renvoyer le tout de manière transparente:
Production:
https://codepen.io/fnocke/pen/mmoxOr?editors=0010
la source
Oui, si vous n'avez aucune idée du nombre d'arguments possibles au moment de la déclaration de fonction, vous pouvez déclarer la fonction sans paramètres et accéder à toutes les variables par le tableau d'arguments qui est passé au moment de l'appel de la fonction.
la source
Dans ES6, vous pouvez faire quelque chose comme ceci:
la source
Dans ES6, utilisez
Array.from
:Pour le code non ES6, utilisez JSON.stringify et JSON.parse:
Si la conservation est nécessaire au lieu de la stringification, utilisez l' algorithme de clonage structuré interne .
Si des nœuds DOM sont passés, utilisez XMLSerializer comme dans une question non liée .
Si vous exécutez en tant que bookmarklet, vous devrez peut-être encapsuler chaque argument de données structurées dans un constructeur d'erreur pour
JSON.stringify
fonctionner correctement.Références
Structure Clone CommonJS Module
Clone d'objet JS
MDN: Array.from ()
la source