Skip to content

Lección 27: Parámetros por Defecto y Rest Parameters

ES6 introdujo dos características poderosas para trabajar con parámetros de funciones: parámetros por defecto y rest parameters.

Permiten asignar valores predeterminados a parámetros que no se pasan o son undefined:

function saludar(nombre = 'Invitado') {
return `Hola, ${nombre}`;
}
console.log(saludar()); // "Hola, Invitado"
console.log(saludar('Carlos')); // "Hola, Carlos"

Agrupan el resto de argumentos en un array:

function sumarTodos(...numeros) {
return numeros.reduce((total, n) => total + n, 0);
}
console.log(sumarTodos(1, 2, 3, 4)); // 10

Es un objeto array-like disponible solo en funciones tradicionales (no arrow) que contiene todos los argumentos pasados:

function mostrarArgumentos() {
console.log(arguments);
}
mostrarArgumentos(1, 'hola', true); // [Arguments] { '0': 1, '1': 'hola', '2': true }
// Parámetros por defecto con objetos
function configurar({ tamaño = 'mediano', color = 'azul', material = 'plástico' } = {}) {
return `Configuración: ${tamaño}, ${color}, ${material}`;
}
console.log(configurar({ color: 'rojo' })); // "Configuración: mediano, rojo, plástico"
console.log(configurar()); // "Configuración: mediano, azul, plástico"
// Rest parameters con otros parámetros
function registrar(usuario, ...habilidades) {
console.log(`${usuario} tiene habilidades: ${habilidades.join(', ')}`);
}
registrar('Ana', 'JS', 'Python', 'Diseño'); // "Ana tiene habilidades: JS, Python, Diseño"

Los parámetros por defecto solo se aplican cuando el argumento es undefined, no cuando es null:

function test(x = 'default') {
console.log(x);
}
test(undefined); // "default"
test(null); // null (no se aplica el default)

El objeto arguments no está disponible en arrow functions. Si necesitas algo similar, usa rest parameters.

Los parámetros por defecto se evalúan en el momento de la llamada, no en la definición. Puedes usar funciones como valor por defecto:

function generarId() {
return Date.now();
}
function crearUsuario(nombre, id = generarId()) {
return { nombre, id };
}

Escribe una función llamada listarAmigos que reciba un nombre como primer parámetro y una cantidad variable de nombres de amigos usando rest parameters. Debe devolver un string como “Carlos tiene 3 amigos: Ana, Luis, Marta”.

function listarAmigos(nombre, ...amigos) {
// Escribe aquí
}
console.log(listarAmigos('Carlos', 'Ana', 'Luis', 'Marta'));
// "Carlos tiene 3 amigos: Ana, Luis, Marta"