260 votes

Est-il possible d'obtenir tous les arguments d'une fonction comme un seul objet à l'intérieur de cette fonction ?

En PHP, il y a func_num_args y func_get_args existe-t-il quelque chose de similaire pour JavaScript ?

388voto

Thomas Eding Points 8651

Utilisez arguments . Vous pouvez y accéder comme à un tableau. Utilisez arguments.length pour le nombre d'arguments.

73 votes

Cela ne fonctionne que pour le JavaScript traditionnel function pas la grosse flèche ES2015+. => fonctions. Pour celles-ci, vous devez utiliser ...args dans la définition de la fonction comme suit : (...args) => console.log(args) .

0 votes

<script src="nom.js?disableSending=1&testInstantly=1"></script> "Erreur de référence non rencontrée : arguments n'est pas défini"

0 votes

David : window.location n'est pas défini comme prévu lorsqu'un fichier JavaScript est inclus dans le HTML à l'aide d'une balise script. Tous les arguments sont perdus en utilisant cette approche.

161voto

Luke Points 1780

En arguments es 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>');
}

Essayez-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]

Tous les détails : https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Functions_and_function_scope/arguments

4 votes

Pourquoi ne pas poster le résultat ici aussi ? :)

2 votes

Cette réponse est bien meilleure que la réponse acceptée car elle contient un extrait de code fonctionnel et montre le résultat. La réponse acceptée est trop éparse.

0 votes

Bonne réponse... ce serait une excellente réponse si l'on ajoutait "pas un tableau réel".

55voto

ES6 permet une construction où 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]); 
}

23voto

Connor Points 7403

En arguments est l'endroit où sont stockés les arguments des fonctions.

L'objet arguments agit et ressemble à un tableau, il l'est fondamentalement, mais il ne dispose pas des méthodes des 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 à un objet réel Le tableau est comme ça :

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

1 votes

[].slice.apply(arguments); n'est pas la meilleure solution car elle entraîne une allocation inutile de tableaux vides.

10voto

Iman Mohamadi Points 176

Vous pouvez également le convertir en tableau si vous préférez. Si les génériques de tableau sont disponibles :

var args = Array.slice(arguments)

Autrement :

var args = Array.prototype.slice.call(arguments);

de Mozilla MDN :

Vous ne devriez pas trancher sur les arguments car cela empêche les optimisations dans moteurs JavaScript (V8 par exemple).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X