Saltar al contenido

Pase un número desconocido de argumentos a la función javascript

Solución:

ES3 (o ES5 o Javascript de la vieja escuela)

Puede acceder a los argumentos pasados ​​a cualquier función de JavaScript a través de la magia arguments objeto, que se comporta de manera similar a una matriz. Utilizando arguments tu función se vería así

var print_names = function() {
     for (var i=0; i<arguments.length; i++) console.log(arguments[i]);
}

Es importante tener en cuenta que arguments es no una matriz. MDC tiene buena documentación al respecto: https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Functions#Using_the_arguments_object

Si quieres girar arguments en una matriz para que puedas hacer cosas como .slice(), .push() etc, use algo como esto:

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

ES6 / Mecanografiado

¡Hay una forma mejor! La nueva función de parámetros de descanso te respalda:

var print_names = function(...names) {
    for (let i=0; i<names.length; i++) console.log(names[i]);
}

ES6 / ES2015

Aproveche la sintaxis del parámetro rest.

function printNames(...names) {
  console.log(`number of arguments: ${names.length}`);
  for (var name of names) {
    console.log(name);
  }
}

printNames('foo', 'bar', 'baz');

Hay tres diferencias principales entre los parámetros rest y el objeto de argumentos:

  • Los parámetros rest son solo aquellos a los que no se les ha dado un nombre separado, mientras que el objeto de argumentos contiene todos los argumentos pasados ​​a la función;
  • el objeto de argumentos no es una matriz real, mientras que los parámetros de resto son instancias de matriz, lo que significa que métodos como sort, map, forEach o pop se pueden aplicar directamente;
  • el objeto de argumentos tiene una funcionalidad adicional específica para sí mismo (como la propiedad callee).

var 
print_names = function() {
    console.log.apply( this, arguments );
};

print_names( 1, 2, 3, 4 );
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *