Movatterモバイル変換


[0]ホーム

URL:


  1. Tecnología web para desarrolladores
  2. JavaScript
  3. Referencia de JavaScript
  4. Funciones
  5. El objeto arguments

Esta página ha sido traducida del inglés por la comunidad.Aprende más y únete a la comunidad de MDN Web Docs.

View in EnglishAlways switch to English

El objeto arguments

Baseline Widely available *

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨julio de 2015⁩.

* Some parts of this feature may have varying levels of support.

arguments es un objeto similar aArray accesible dentro defunciones que contiene los valores de los argumentos pasados a esa función.

Pruébalo

function func1(a, b, c) {  console.log(arguments[0]);  // Expected output: 1  console.log(arguments[1]);  // Expected output: 2  console.log(arguments[2]);  // Expected output: 3}func1(1, 2, 3);

Descripción

Nota:Si estás escribiendo código compatible con ES6, entonces se deben preferir losparámetros resto.

Nota:"Similar a Array" significa quearguments tiene una propiedadlenght y propiedades indexadas desde cero, pero no tiene métodos integrados deArray comoforEach() omap(). Ve la§Descripción para obtener más detalles.

El objetoarguments es una variable local disponible en todas las funciones que no sonfunciones flecha. Puedes hacer referencia a los argumentos de una función dentro de esa función utilizando su objetoarguments. Tiene entradas para cada argumento con el que se llamó a la función, con el índice de la primera entrada en0.

Por ejemplo, si a una función se le pasan 3 argumentos, puedes acceder a ellos de la siguiente manera:

js
arguments[0]; // primer argumentoarguments[1]; // segundo argumentoarguments[2]; // tercer argumento

También puedes establecer o reasignar cada argumento:

js
arguments[1] = "new value";

El objetoarguments no es unArray. Es similar, pero carece de todas las propiedades deArray excepto delength. Por ejemplo, no tiene el métodopop().

Sin embargo, se puede convertir en unArray real:

js
var args = Array.prototype.slice.call(arguments);// El uso de un arreglo literal es más corto que el anterior pero asigna un arreglo vacíovar args = [].slice.call(arguments);

Así como puedes hacer con cualquier objeto tipoArray, puedes usar el métodoArray.from() de ES2015 o lapropagación de sintaxis para convertirarguments en un arreglo real:

js
let args = Array.from(arguments);// olet args = [...arguments];

El objetoarguments es útil para funciones llamadas con más argumentos de los que declara aceptar formalmente. Esta técnica es útil para funciones a las que se les puede pasar un número variable de argumentos, comoMath.min(). Esta función de ejemplo acepta cualquier número de argumentos de cadena y devuelve la más larga:

js
function longestString() {  var longest = "";  for (var i = 0; i < arguments.length; i++) {    if (arguments[i].length > longest.length) {      longest = arguments[i];    }  }  return longest;}

Puedes usararguments.length para contar con cuántos argumentos se llamó a la función. Si, en cambio, deseas contar cuántos parámetros se declara que acepta una función, inspecciona la propiedadlength de esa función.

Usartypeof conarguments

El operadortypeof devuelve'object' cuando se usa conarguments

js
console.log(typeof arguments); // 'object'

El tipo de argumentos individuales se puede determinar indexandoarguments:

console.log(typeof arguments[0]); // devuelve el tipo del primer argumento

Propiedades

arguments.callee

Referencia a la función en ejecución a la que pertenecen los argumentos. Prohibida en modo estricto.

arguments.length

El número de argumentos que se pasaron a la función.

arguments[@@iterator]

Devuelve un nuevo objetoArray iterator que contiene los valores de cada índice enarguments.

Ejemplos

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 una cadena que contiene los caracteres que separan los elementos a concatenar.

js
function myConcat(separator) {  let args = Array.prototype.slice.call(arguments, 1);  return args.join(separator);}

Puedes pasar tantos argumentos como desees a esta función. Devuelve una lista de cadenas usando cada argumento en la lista:

js
// returns "red, orange, blue"myConcat(", ", "red", "orange", "blue");// devuelve "elephant; giraffe; lion; cheetah"myConcat("; ", "elephant", "giraffe", "lion", "cheetah");// devuelve "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 una cadena que contiene HTML para una lista. El único argumento formal para la función es una cadena que es "u" si la lista debe estardesordenada (con viñetas), u "o" si la lista esordenada (numerada). La función se define de la siguiente manera:

js
function list(type) {  var html = "<" + type + "l><li>";  var args = Array.prototype.slice.call(arguments, 1);  html += args.join("</li><li>");  html += "</li></" + type + "l>"; // fin de la lista  return html;}

Puedes pasar cualquier número de argumentos a esta función y agregar cada argumento como un elemento de lista a una lista del tipo indicado. Por ejemplo:

js
let listHTML = list("u", "One", "Two", "Three");/* la listHTML es:"<ul><li>One</li><li>Two</li><li>Three</li></ul>"*/

Parámetrosrest, predeterminados y desestructurados

El objetoarguments se puede utilizar junto con parámetrosrest,predeterminados ydesestructurados.

js
function foo(...args) {  return args;}foo(1, 2, 3); // [1, 2, 3]

Si bien la presencia de parámetrosrest, predeterminados o desestructurados no alterael comportamiento del objetoarguments en el código de modo estricto, existen sutiles diferencias para el código no estricto.

En el código de modo estricto, el objetoarguments se comporta de la misma manera independientemente de que se pasen parámetrosrest, predeterminados o desestructurados a una función. Es decir, asignar nuevos valores a las variables en el cuerpo de la función no afectará al objetoarguments. La asignación de nuevas variables al objetoarguments tampoco afectará el valor de las variables.

Nota:No puedes escribir una directiva"use strict"; en el cuerpo de una definición de función que acepte parámetrosrest, predeterminados o desestructurados. Si lo haces, generará unerror de sintaxis.

Las funciones no estrictas a las que se les pasan solo parámetros simples (es decir, no parámetrosrest, predeterminados o desestructurados) sincronizarán el valor de los nuevos valores de las variables en el cuerpo de la función con el objetoarguments, y viceversa:

js
function func(a) {  arguments[0] = 99; // actualiza arguments[0] además actualiza a  console.log(a);}func(10); // 99

Y también:

js
function func(a) {  a = 99; // la actualización también actualiza arguments[0]  console.log(arguments[0]);}func(10); // 99

Por el contrario, las funciones no estrictas a las quese les pasan parámetrosrest, predeterminados o desestructuradosno sincronizarán los nuevos valores asignados a las variables de los argumentos en el cuerpo de la función con el objetoarguments. En cambio, el objetoarguments en funciones no estrictas con parámetros complejossiempre reflejarán los valores pasados a la función cuando se invocó (este es el mismo comportamiento exhibido por todas las funciones en modo estricto, independientemente del tipo de variables que se le pasen):

js
function func(a = 55) {  arguments[0] = 99; // actualizar arguments[0] tampoco actualiza a  console.log(a);}func(10); // 10

Y también:

js
function func(a = 55) {  a = 99; // actualizar a tampoco actualiza arguments[0]  console.log(arguments[0]);}func(10); // 10

Y también:

js
// Un parámetro predeterminado sin seguimientofunction func(a = 55) {  console.log(arguments[0]);}func(); // undefined

Especificaciones

Specification
ECMAScript® 2026 Language Specification
# sec-arguments-exotic-objects

Compatibilidad con navegadores

Ve también

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp