CAP 04 · LEC 03·Funciones

Parámetros y valores por defecto

Los parámetros por defecto eliminan los chequeos manuales de undefined. Combinados con desestructuración hacen las funciones más expresivas y robustas.

● INTERMEDIO7 min lectura4 ejerciciospor Fernando Herrera · actualizado mayo de 2026
¿Encontraste un error o algo que mejorar?Editá esta lección en GitHub →

Parámetros por defecto

ES6 permite asignar un valor por defecto directamente en la firma. Se usa cuando el argumento es undefined o no se pasa.

// Sin defaults (patrón antiguo) function saludar1(nombre) { nombre = nombre || "Invitado"; // problema: 0 o "" también activan el fallback return `Hola, ${nombre}`; } // Con defaults (ES6) function saludar2(nombre = "Invitado") { return `Hola, ${nombre}`; } console.log(saludar2()); // "Hola, Invitado" console.log(saludar2("Ana")); // "Hola, Ana" console.log(saludar2(undefined)); // "Hola, Invitado" console.log(saludar2(null)); // "Hola, null" ← null no activa el default
// Sin defaults — TypeScript requiere tipo explícito function saludar1(nombre: string) { return `Hola, ${nombre}`; } // Con defaults (ES6) — TypeScript infiere: nombre es string function saludar2(nombre = "Invitado"): string { return `Hola, ${nombre}`; } console.log(saludar2()); // "Hola, Invitado" console.log(saludar2("Ana")); // "Hola, Ana" console.log(saludar2(undefined)); // "Hola, Invitado" // saludar2(null) ← TypeScript lo bloquea: null no es string | undefined
SalidaHola, Invitado Hola, Ana
null vs undefined

El valor por defecto solo se aplica cuando el argumento es undefined. null no activa el default — null es un valor explícito.

Desestructuración en parámetros

Puedes desestructurar objetos y arrays directamente en la firma de la función:

// Sin desestructuración function mostrarUsuario1(usuario) { console.log(usuario.nombre, usuario.edad); } // Con desestructuración en parámetro function mostrarUsuario({ nombre, edad }) { console.log(nombre, edad); } // Con defaults en la desestructuración function mostrarUsuario2({ nombre = "Sin nombre", edad = 0 } = {}) { console.log(nombre, edad); } mostrarUsuario({ nombre: "Ana", edad: 25 }); // "Ana" 25 mostrarUsuario2(); // "Sin nombre" 0 mostrarUsuario2({ nombre: "Luis" }); // "Luis" 0
// Sin desestructuración — tipo inline function mostrarUsuario1(usuario: { nombre: string; edad: number }): void { console.log(usuario.nombre, usuario.edad); } // Con desestructuración en parámetro function mostrarUsuario({ nombre, edad }: { nombre: string; edad: number }): void { console.log(nombre, edad); } // Con defaults en la desestructuración function mostrarUsuario2({ nombre = "Sin nombre", edad = 0 }: { nombre?: string; edad?: number } = {}): void { console.log(nombre, edad); } mostrarUsuario({ nombre: "Ana", edad: 25 }); // "Ana" 25 mostrarUsuario2(); // "Sin nombre" 0 mostrarUsuario2({ nombre: "Luis" }); // "Luis" 0
SalidaAna 25 Sin nombre 0

Orden de parámetros con defaults

Los parámetros con defaults deben ir al final. Si van antes, hay que pasar undefined para saltarlos, lo que es confuso:

// ❌ Default al inicio — necesita undefined para saltarlo function mal(separador = ", ", a, b) { return a + separador + b; } mal(undefined, "Ana", "Luis"); // "Ana, Luis" (confuso) // ✅ Defaults al final function bien(a, b, separador = ", ") { return a + separador + b; } bien("Ana", "Luis"); // "Ana, Luis" bien("Ana", "Luis", " & "); // "Ana & Luis"

Practica