~/VibeHandbook
PDF gratis

Lenguajes

developer.mozilla.org

JavaScript

Qué es

JavaScript es el idioma de la web. Es el único que se ejecuta de forma nativa en todos los navegadores. Gracias a Node, Deno y Bun, también se ejecuta en servidores, así que puedes construir una aplicación completa con él. Solo verifica tus datos mientras el programa se está ejecutando, no antes — como escribir una receta sin una lista de ingredientes previa, donde un ingrediente faltante se descubre recién a mitad de la cocción (a esto se le llama tener "tipado dinámico"). También está orientado a eventos y está en todas partes, lo que lo convierte en el lenguaje de programación más utilizado del mundo.

Fortalezas

  • Se ejecuta en todas partes: navegadores, servidores, funciones , incluso sistemas embebidos.
  • Sin paso de compilación; edita y recarga para obtener retroalimentación instantánea.
  • Un ecosistema npm (Node Package Manager, Gestor de Paquetes de Node) enorme y una comunidad gigantesca.
  • Soporte de primera clase para operaciones asíncronas con promesas y async/await.

Compensaciones (trade-offs)

  • Sin tipos estáticos: muchos errores solo aparecen en tiempo de ejecución.
  • Defectos históricos: igualdad laxa (==), el enlace de this, coerción implícita.
  • Es fácil generar una maraña de callbacks o dependencias sin disciplina.
  • Que el y el compartan el mismo lenguaje puede difuminar los límites de la arquitectura.

Cuándo elegirlo

Elige JavaScript puro para scripts rápidos, proyectos pequeños, aprendizaje, prototipos, o entornos donde agregar un paso de compilación no vale la pena. Para algo más grande o de vida más larga, la mayoría de los equipos prefiere TypeScript en su lugar — pero JS sigue siendo la forma más rápida de poner algo a funcionar en un navegador o en una pequeña herramienta de Node.

Encaje con vibe coding

Los asistentes de IA manejan JavaScript con fluidez, pero la falta de tipos significa que el código generado puede asumir en silencio la forma de datos equivocada. Indícale a la IA que use sintaxis moderna (const/let, funciones flecha, async/await, módulos) e igualdad estricta, y pídele que agregue verificaciones defensivas o comentarios JSDoc donde la forma de los datos importe. Especifica tu entorno — navegador vs. Node, ESM vs. CommonJS — para que las importaciones sean correctas. Como no hay un compilador en el cual apoyarse, pide un ejemplo pequeño y ejecutable o una prueba para poder verificar el comportamiento directamente.

const fetchTitle = async (url) => {
  const res = await fetch(url);
  if (!res.ok) throw new Error(`HTTP ${res.status}`);
  const html = await res.text();
  return html.match(/<title>(.*?)<\/title>/i)?.[1] ?? "(no title)";
};

fetchTitle("https://example.com").then(console.log);