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 Arraymé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