Situación donde un bloque de código está contenido dentro de otro bloque.
El código anidado puede aumentar la complejidad de un programa. Se recomienda limitar los niveles de anidación.
// Anidación excesiva (difícil de leer) function procesarDatos(datos) { if (datos) { if (datos.usuarios) { for (const usuario of datos.usuarios) { if (usuario.activo) { if (usuario.edad > 18) { // 5 niveles de anidación 😱 } } } } } } // Mejor: Early returns (guard clauses) function procesarDatos(datos) { if (!datos) return; if (!datos.usuarios) return; const usuariosActivos = datos.usuarios .filter(u => u.activo && u.edad > 18); // Lógica clara con 1 nivel for (const usuario of usuariosActivos) { procesarUsuario(usuario); } } // Objetos anidados const config = { server: { port: 3000, ssl: { enabled: true, cert: '/path/to/cert' } } }; // Acceso seguro con optional chaining const sslEnabled = config?.server?.ssl?.enabled ?? false;