arguments
es un Array
-como objeto accesible en el interior funciones que contiene los valores de los argumentos pasados a esa función.
Descripción
Nota: Si está escribiendo código compatible con ES6, entonces se deben preferir los parámetros de descanso.
Nota: “Array-like” significa que arguments
tiene un length
propiedad y propiedades indexadas desde cero, pero no tiene Array
métodos integrados como forEach()
o map()
. Consulte la sección Descripción para obtener más detalles.
los arguments
El objeto es una variable local disponible dentro de todas las funciones que no son flechas. Puede hacer referencia a los argumentos de una función dentro de esa función utilizando su arguments
objeto. Tiene entradas para cada argumento con el que se llamó a la función, con el índice de la primera entrada en 0
.
Por ejemplo, si a una función se le pasan 3 argumentos, puede acceder a ellos de la siguiente manera:
arguments[0]// first argument arguments[1]// second argument arguments[2]// third argument
Cada argumento también se puede establecer o reasignar:
arguments[1]='new value';
los arguments
el objeto no es un Array
. Es similar, pero le falta todo Array
propiedades excepto length
. Por ejemplo, no tiene la pop()
método.
Sin embargo, se puede convertir en un verdadero Array
:
var args =Array.prototype.slice.call(arguments);// Using an array literal is shorter than above but allocates an empty arrayvar args =[].slice.call(arguments);
Como puede hacer con cualquier objeto tipo Array, puede usar ES2015’s Array.from()
método o sintaxis de difusión para convertir arguments
a una matriz real:
let args = Array.from(arguments);// orlet args =[...arguments];
los arguments
object es útil para funciones llamadas con más argumentos de los que se declara formalmente aceptar. Esta técnica es útil para funciones a las que se les puede pasar un número variable de argumentos, como Math.min()
. Esta función de ejemplo acepta cualquier número de string argumentos y devuelve el más largo:
functionlongestString()var longest ='';for(var i=0; i < arguments.length; i++)if(arguments[i].length > longest.length) longest = arguments[i];return longest;
Puedes usar arguments.length
para contar con cuántos argumentos se llamó a la función. Si, en cambio, desea contar cuántos parámetros se declara que acepta una función, inspeccione el length
propiedad.
Usando typeof con argumentos
los typeof
devoluciones del operador 'object'
cuando se usa con arguments
console.log(typeof arguments);// 'object'
El tipo de argumentos individuales se puede determinar indexando arguments
:
console.log(typeof arguments[0]);// returns the type of the first argument
Propiedades
arguments.callee
- Referencia a la función que se está ejecutando actualmente a la que pertenecen los argumentos. Prohibido en modo estricto.
arguments.length
- El número de argumentos que se pasaron a la función.
arguments[@@iterator]
- Devuelve un nuevo objeto iterador Array que contiene los valores de cada índice en
arguments
.
Ejemplos de
Definición de una función que concatena varias cadenas
Este ejemplo define una función que concatena varias cadenas. El único argumento formal de la función es un string que contiene los caracteres que separan los elementos a concatenar.
functionmyConcat(separator)let args =Array.prototype.slice.call(arguments,1);return args.join(separator);
Puede pasar tantos argumentos como desee a esta función. Devuelve un string lista usando cada argumento en la lista:
// returns "red, orange, blue"myConcat(', ','red','orange','blue');// returns "elephant; giraffe; lion; cheetah"myConcat('; ','elephant','giraffe','lion','cheetah');// returns "sage. basil. oregano. pepper. parsley"myConcat('. ','sage','basil','oregano','pepper','parsley');
Definición de una función que crea listas HTML
Este ejemplo define una función que crea un string que contiene HTML para una lista. El único argumento formal para la función es un string es decir “u
“si la lista va a ser desordenado (con viñetas), o “o
“si la lista va a ser ordenado (numerado). La función se define de la siguiente manera:
functionlist(type)var html ='<'+ type +'l>' ;var args =Array.prototype.slice.call(arguments,1); html += args.join('' ); html +=''+ type +'l>';// end listreturn html;
Puede pasar cualquier número de argumentos a esta función y agrega cada argumento como un elemento de lista a una lista del tipo indicado. Por ejemplo:
let listHTML =list('u','One','Two','Three');/* listHTML is: "" */
- One
- Two
- Three
Parámetros de descanso, predeterminados y desestructurados
los arguments
El objeto se puede utilizar junto con los parámetros de descanso, predeterminados y desestructurados.
functionfoo(...args)return args;foo(1,2,3);// [1, 2, 3]
Si bien la presencia de parámetros de reposo, predeterminados o desestructurados no altera el comportamiento del arguments
objeto en código de modo estricto, existen diferencias sutiles para el código no estricto.
En código de modo estricto, el arguments
El objeto se comporta de la misma manera tanto si se pasa una función como si no se pasan parámetros de reposo, predeterminados o desestructurados. Es decir, asignar nuevos valores a las variables en el cuerpo de la función no afectará la arguments
objeto. Tampoco la asignación de nuevas variables a la arguments
El objeto afecta el valor de las variables.
Nota: No puedes escribir un "use strict";
directiva en el cuerpo de una definición de función que acepta parámetros de reposo, predeterminados o desestructurados. Si lo hace, se producirá un error de sintaxis.
Las funciones no estrictas a las que se les pasan solo parámetros simples (es decir, no parámetros de reposo, predeterminados o reestructurados) sincronizarán el valor de los nuevos valores de las variables en el cuerpo de la función con el arguments
objeto y viceversa:
functionfunc(a) arguments[0]=99;// updating arguments[0] also updates a console.log(a);func(10);// 99
Y también:
functionfunc(a) a =99;// updating a also updates arguments[0] console.log(arguments[0]);func(10);// 99
Por el contrario, las funciones no estrictas que están pasaron parámetros de reposo, predeterminados o desestructurados no sincronizar los nuevos valores asignados a las variables de argumento en el cuerpo de la función con el arguments
objeto. En cambio, el arguments
objeto en funciones no estrictas con parámetros complejos siempre será reflejan los valores pasados a la función cuando se llamó a la función (este es el mismo comportamiento que exhiben todas las funciones en modo estricto, independientemente del tipo de variables que se pasen):
functionfunc(a =55) arguments[0]=99;// updating arguments[0] does not also update a console.log(a);func(10);// 10
Y también:
functionfunc(a =55) a =99;// updating a does not also update arguments[0] console.log(arguments[0]);func(10);// 10
Y también:
// An untracked default parameterfunctionfunc(a =55) console.log(arguments[0]);func();// undefined
Especificaciones
Especificación |
---|
Especificación del lenguaje ECMAScript (ECMAScript) # sec-argumentos-objetos-exóticos |
Compatibilidad del navegador
Escritorio | Móvil | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Cromo | Borde | Firefox | explorador de Internet | Ópera | Safari | WebView Android | Chrome Android | Firefox para Android | Opera Android | Safari en IOS | Internet de Samsung | |
arguments |
1 | 12 | 1 | 3 | 3 | 1 | 1 | 18 | 4 | 10.1 | 1 | 1.0 |
callee |
1 | 12 | 1 | 6 | 4 | 1 | 1 | 18 | 4 | 10.1 | 1 | 1.0 |
length |
1 | 12 | 1 | 4 | 4 | 1 | 1 | 18 | 4 | 10.1 | 1 | 1.0 |
@@iterator |
52 | 12 | 46 | No | 39 | 9 | 52 | 52 | 46 | 41 | 9 | 6.0 |
Ver también
Function
- Parámetros de descanso
Agradecemos que desees sustentar nuestra función poniendo un comentario y dejando una valoración te lo agradecemos.