w3schools valor utiliza una terminar retornar pasar parametros para las instrucciones funciones funcion ejemplos desde anidadas javascript algorithm function arguments marshalling

javascript - valor - ¿Es posible obtener todos los argumentos de una función como un solo objeto dentro de esa función?



pasar parametros a una funcion javascript desde html (9)

Como muchos otros señalaron, los arguments contienen todos los argumentos pasados ​​a una función.

Si desea llamar a otra función con los mismos argumentos, use apply

Ejemplo:

var is_debug = true; var debug = function() { if (is_debug) { console.log.apply(console, arguments); } } debug("message", "another argument")

En PHP hay func_num_args y func_get_args , ¿hay algo similar para JavaScript?


ES6 permite una construcción donde se especifica un argumento de función con una notación "..." como

function testArgs (...args) { // Where you can test picking the first element console.log(args[0]); }


El objeto de arguments es donde se almacenan los argumentos de funciones.

El objeto de argumentos actúa y parece una matriz, básicamente es, simplemente no tiene los métodos que tienen las matrices, por ejemplo:

Array.forEach(callback[, thisArg]);

Array.map(callback[, thisArg])

Array.filter(callback[, thisArg]);

Array.slice(begin[, end])

Array.indexOf(searchElement[, fromIndex])

Creo que la mejor manera de convertir un objeto de arguments en una matriz real es así:

argumentsArray = [].slice.apply(arguments);

Eso lo convertirá en una matriz;

reutilizable

function ArgumentsToArray(args) { return [].slice.apply(args); } (function() { args = ArgumentsToArray(arguments); args.forEach(function(value) { console.log(''value ==='', value); }); })(''name'', 1, {}, ''two'', 3)

resultado:

> value === name
> value === 1
> value === Object {}
> value === two
> value === 3


En ES6, use Array.from .

function foo() { foo.bar = Array.from(arguments); foo.baz = foo.bar.join(); } foo(1,2,3,4,5,6,7); foo.bar // Array [1, 2, 3, 4, 5, 6, 7] foo.baz // "1,2,3,4,5,6,7"

Para código no ES6, use JSON.stringify y JSON.parse:

function foo() { foo.bar = JSON.stringify(arguments); foo.baz = JSON.parse(foo.bar); } /* Atomic Data */ foo(1,2,3,4,5,6,7); foo.bar // "{"0":1,"1":2,"2":3,"3":4,"4":5,"5":6,"6":7}" foo.baz // [object Object] /* Structured Data */ foo({1:2},[3,4],/5,6/,Date()) foo.bar //"{"0":{"1":2},"1":[3,4],"2":{},"3":"Tue Dec 17 2013 16:25:44 GMT-0800 (Pacific Standard Time)"}" foo.baz // [object Object]

Si se necesita preservación en lugar de la estratificación, use el algoritmo de clonación estructurado interno .

Si se pasan nodos DOM, use XMLSerializer como en una pregunta no relacionada .

with (new XMLSerializer()) {serializeToString(document.documentElement) }

Si se ejecuta como un marcador, es posible que deba ajustar cada argumento de datos estructurados en un constructor de errores para que JSON.stringify funcione correctamente.

Referencias


Los argumentos son un objeto similar a una matriz (no una matriz real). Ejemplo de función ...

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

Pruébalo...

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]

Los detalles completos: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Functions_and_function_scope/arguments


Respuesta similar a Gunnar, con un ejemplo más completo: incluso puede devolver todo de forma transparente:

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 });

Salida:

foo bar true 42 ["yes","no"] {"banana":true}

https://codepen.io/fnocke/pen/mmoxOr?editors=0010


Sí, si no tiene idea de cuántos argumentos son posibles en el momento de la declaración de la función, entonces puede declarar la función sin parámetros y puede acceder a todas las variables mediante la matriz de argumentos que se pasan al momento de la llamada de la función.


También puedes convertirlo a una matriz si lo prefieres. Si Array genéricos están disponibles:

var args = Array.slice(arguments)

De otra manera:

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

de arguments :

No debe dividir los argumentos porque evita las optimizaciones en los motores de JavaScript (V8 por ejemplo).


Usa arguments . Puedes acceder a él como una matriz. Use arguments.length para el número de argumentos.