Incluso un ingeniero backend, al final, el “resultado” se ejecuta en el navegador.
No es necesario ser un experto en frontend, pero al menos conocer la sintaxis y los métodos mínimos de JavaScript:
-
Sería mucho más fácil identificar la causa de los errores
-
Podrás comunicarte eficazmente con los compañeros de frontend
-
Podrás manejar al menos interfaces simples por ti mismo.
En este artículo, se resumen los 5 mejores métodos de JavaScript de frontend que definitivamente serán útiles para los ingenieros backend.
1. fetch – Hacer llamadas HTTP desde el navegador
¿Por qué es importante?
Lo más familiar para un ingeniero backend son las API HTTP.
En el frontend, a menudo se llama a esta API usando fetch.
Solo entender cómo se envían las solicitudes y cómo se manejan las respuestas/errores facilita enormemente el proceso de depuración.
Uso básico
// Ejemplo de solicitud GET
fetch('https://api.example.com/users/1')
.then((res) => {
if (!res.ok) throw new Error('Error HTTP ' + res.status);
return res.json(); // Analiza el JSON
})
.then((data) => {
console.log('usuario:', data);
})
.catch((err) => {
console.error('error de fetch:', err);
});
Ejemplo de POST + JSON
async function createUser() {
try {
const res = await fetch('https://api.example.com/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ name: 'Alice', age: 30 }),
});
if (!res.ok) {
throw new Error('Error HTTP ' + res.status);
}
const data = await res.json();
console.log('creado:', data);
} catch (e) {
console.error(e);
}
}
Punto clave
-
Con
res.ok,res.status, etc., se pueden diferenciar errores en el servidor -
Los patrones de uso de
JSON.stringify,res.json()pueden ser memorizados casi como plantillas -
Si surge un error de CORS, es recomendable acostumbrarse a observar cómo se envía la solicitud
fetchen la consola del navegador
2. Promise y async/await – La base de la lógica asíncrona
¿Por qué es importante?
El frontend es mayormente asíncrono.
-
Eventos de UI
-
Solicitudes HTTP
-
Temporizadores, WebSocket, etc.
Los conceptos clave para manejar esto son Promise y async/await.
Si has trabajado con I/O asíncrono en el backend, el concepto es similar.
Base de Promise
function getUser(id) {
return fetch(`/api/users/${id}`).then((res) => res.json());
}
getUser(1)
.then((user) => {
console.log(user);
})
.catch((err) => {
console.error(err);
});
Más fácil de leer con async/await
async function showUser(id) {
try {
const res = await fetch(`/api/users/${id}`);
if (!res.ok) throw new Error('HTTP ' + res.status);
const user = await res.json();
console.log(user);
} catch (e) {
console.error(e);
}
}
showUser(1);
Llamadas paralelas (un patrón común en el backend)
async function loadDashboard() {
const [userRes, statsRes] = await Promise.all([
fetch('/api/me'),
fetch('/api/stats'),
]);
const [user, stats] = await Promise.all([
userRes.json(),
statsRes.json(),
]);
console.log(user, stats);
}
Punto clave
-
Las API basadas en
Promiseson elegibles para ser leídas con.then().catch()oasync/await -
Es útil saber el patrón de
Promise.allpara enviar varias solicitudes a la vez
3. Los tres métodos de arreglos: map, filter, reduce
¿Por qué es importante?
En el frontend también se manejan datos.
-
Convertir una lista JSON recibida del servidor a un formato de datos para la visualización
-
Filtrar solo los datos que cumplen ciertas condiciones
-
Calcular sumas/estadísticas
Para esto, se utilizan mucho los métodos de arreglo. Es el mismo concepto que el manejo de colecciones que es común en el backend.
map – “Transformar” cada elemento de un arreglo
const users = [
{ id: 1, name: 'Alice', age: 31 },
{ id: 2, name: 'Bob', age: 27 },
];
const names = users.map((u) => u.name);
// ['Alice', 'Bob']
filter – Mantener solo los que cumplen con la condición
const adults = users.filter((u) => u.age >= 30);
// [{ id: 1, name: 'Alice', age: 31 }]
reduce – Agrupar un arreglo en un solo valor
const totalAge = users.reduce((sum, u) => sum + u.age, 0);
// 58
Ejemplo de encadenamiento
const avgAgeOfAdults = users
.filter((u) => u.age >= 30)
.reduce((acc, u, _, arr) => acc + u.age / arr.length, 0);
Punto clave
-
Cuando veas “código de frontend lleno de bucles for”, puedes empezar a notar puntos de refactorización con
map/filter/reduce -
Si estableces relaciones entre las bibliotecas de colecciones en el backend (Java, Kotlin, Python, Go, etc.), la comprensión será más rápida
4. Herramientas clave para manipular el DOM: querySelector, addEventListener, classList
¿Por qué es importante?
Aunque uses marcos (React, Vue, etc.), en la fase de depuración, al final debes ver el DOM directamente.
Para páginas de administración simples o herramientas internas, a veces se codifica sin un marco utilizando JavaScript puro.
Selección de elementos – querySelector
<button id="save-btn">Guardar</button>
const saveBtn = document.querySelector('#save-btn');
Se utiliza la notación de los selectores CSS.
-
#id -
.class -
button.primary -
div > spanetc.
Manejador de eventos – addEventListener
saveBtn.addEventListener('click', () => {
console.log('¡Botón de guardar clickeado!');
});
Cambiar estilos/estados – classList
<button id="save-btn" class="primary">Guardar</button>
saveBtn.classList.add('loading'); // Agregar clase
saveBtn.classList.remove('primary'); // Quitar clase
saveBtn.classList.toggle('hidden'); // Si está, quita, si no está, agrega
Con solo saber estas combinaciones:
-
“¿Por qué no se presiona el botón?” → Puedes verificar si el elemento DOM está correctamente asignado y si el evento está asignado
-
“¿Por qué no se ve este div?” → Puedes seguir la clase de estado observando
classList
Punto clave
-
Entender el funcionamiento interno de los marcos es mucho menos abrumador si se tiene una base de la API del DOM
-
Es importante tener el hábito de usar
document.querySelector(...)directamente en la consola del navegador
5. Módulos ES – import / export fundamentos
¿Por qué es importante?
Ahora, JavaScript en el frontend utiliza ES Module (ESM) como base.
-
El código se separa en archivos
-
Solo se importan lo que se necesita
-
Aún sin usar Webpack/Babel/bundlers, el navegador entiende directamente ESM
Dado que el uso de ESM también está aumentando en el backend (Node.js), tener esto registrado será de ayuda en ambos lados.
Exportación de módulos – export
// mathUtils.js
export function add(a, b) {
return a + b;
}
export const PI = 3.14;
// Exportación por defecto – valor/función representativos del módulo
export default function mul(a, b) {
return a * b;
}
Importación de módulos – import
// main.js
import mul, { add, PI } from './mathUtils.js';
console.log(add(1, 2)); // 3
console.log(mul(3, 4)); // 12
console.log(PI); // 3.14
-
{ add, PI }: Importar exportación nombrada -
mul: Importar exportación por defecto
Ejemplo de uso de módulos en el navegador
<script type="module" src="/static/js/main.js"></script>
Al declarar así, podrás usar la sintaxis import / export dentro de main.js.
Punto clave
-
El concepto de “modularización” es el mismo tanto en frontend como en backend
-
Conocer las reglas de ruta para importaciones (
./,../, rutas absolutas, alias por bundlers, etc.) te facilitará la lectura de la configuración de construcción de frontend

Conclusión – Lo mínimo que debe saber un backend que también hace frontend
En resumen, lo que un ingeniero backend debe conocer al menos para entender JavaScript de frontend son:
-
fetch– Hacer llamadas HTTP desde el navegador y procesar JSON -
Promise/async/await– Comprender la estructura de la lógica asíncrona -
Métodos de arreglo (
map,filter,reduce) – Transformación/filtrado/agregación de datos -
Fundamentos del DOM (
querySelector,addEventListener,classList) – Selección de elementos en pantalla, eventos, alternancia de estados -
Módulos ES (
import/export) – Comprender la estructura del código en unidades de módulos
Con solo familiarizarse con estos cinco aspectos:
-
Puedes participar en revisiones de código de frontend
-
Puedes implementar/modificar interfaces simples tú mismo
-
Puedes rastrear problemas de integración de API tanto en el frontend como en el backend.
A partir de ahí, es recomendable ampliar el rango según sea necesario hacia marcos como React/Vue, y configuración de construcción/bundling (Webpack, Vite, SWC, etc.).
No hay comentarios.