JavaScript es un lenguaje de programación muy versátil. Se puede usar tanto para añadir dinamismo a las páginas web como para crear aplicaciones web completas, ya sea en el lado del cliente (navegador) como del servidor.
JavaScript es uno de los pilares el desarrollo web, junto con HTML y CSS.
El potencial de JavaScript —abreviado como JS— facilita implementar funciones complejas a las páginas web. Sin él, la web se limitaría a mostrar solo información estática. Por ejemplo, permite actualizar el contenido sin tener que recargar la página, integrar mapas interactivos y añadir animaciones avanzadas.
Es habitual que su nombre sugiera alguna relación con Java, pero son dos lenguajes completamente diferentes que no tienen nada que ver. La similitud en su nombre se debe a una estrategia de marketing de Netscape para aprovechar la popularidad de Java en su momento.
JavaScript se caracteriza por ser un lenguaje interpretado y multiparadigma: permite programar de manera imperativa, orientada a objetos (con prototipos) o funcional. Además, es dinámico y débilmente tipado, por lo que no es necesario declarar de forma explícita el tipo de variable como sí ocurre en otros lenguajes.
El hecho de que JS sea un lenguaje interpretado significa que no es necesario compilar los programas para poder ejecutarlos. Dicho de otra manera, los programas escritos en JS se pueden probar de forma directa, ya sea en un navegador web o en el escritorio, con Node.js, sin tener que realizar procesos intermedios.
La tríada del desarrollo web
La tríada formada por HTML, CSS y JavaScript define la forma en que se construyen las páginas web. Por tanto, estas tres tecnologías son los tres pilares del desarrollo web. Dicho metafóricamente, si la web fuera un coche, HTML sería el chasis, CSS la pintura y JavaScript el volante, los pedales o los botones.
-
HTML es el lenguaje de marcado que permite definir la estructura del contenido en una página web. Permite organizar encabezados, párrafos, imágenes, enlaces y tablas de datos, dando forma al esqueleto del sitio.
-
CSS es el lenguaje de estilos que controla la apariencia de los elementos definidos con el lenguaje HTML. Con él podemos cambiar colores, tamaños, posiciones y aplicar diseños atractivos a las páginas web.
-
JS es el lenguaje de programación que añade dinamismo e interactividad al sitio web. Permite modificar tanto los elementos HTML como los estilos CSS en tiempo real, crear animaciones, validar formularios y mucho más.
Historia de JavaScript
JavaScript fue creado en 1995 por Brendan Eich en Netscape. A lo largo de su historia, el lenguaje ha evolucionado gracias al estándar ECMAScript, definido por la organización ECMA International. Este estándar establece las reglas, la sintaxis y las características principales de JavaScript, lo que ha permitido incorporar nuevas funcionalidades y mejoras; actualmente publicadas cada año.
En consecuencia, cuando hablamos de nuevas versiones de JS, en realidad nos referimos a nuevas ediciones de ECMAScript: como ES5, ES6 o ES2020. Las nuevas funcionalidades se integran en el ecosistema de JavaScript.
En 2009 se creó el entorno de ejecución Node.js, permitiendo usar JavaScript en el lado del servidor. Así, este lenguaje se convirtió en un lenguaje multiplataforma, por lo que empezó a usarse también como lenguaje de uso general.
Lado del cliente
El uso de JavaScript en el «lado del cliente» (client-side, en inglés) es el contexto más habitual y antiguo de usar este lenguaje. El código debe ser referenciado o incluido desde un documento HTML. De este modo, el programa podrá ser leído e interpretado por el navegador web, es decir, el cliente.
Por tanto, una página web puede ser mucho más que un simple documento HTML con el típico contenido estático. Puede incluir programas que interactúen con el usuario y el contenido HTML se cambie de forma dinámica.
El hecho de ejecutar código en el lado del cliente tiene muchas ventajas sobre los programas que se ejecutan en el lado del servidor. Por ejemplo, JavaScript puede ser muy útil para verificar si los datos introducidos por el usuario cumplen una serie de validaciones antes de ser enviados al servidor.
Hay miles de librerías de JavaScript para usar en el lado del cliente. Las librerías contienen funciones y utilidades que se pueden usar en el código según sea necesario. Un ejemplo es jQuery, que nació en 2006 con el fin de manipular más fácilmente los elementos de los documentos HTML.
Otras librerías: anime.js permite crear animaciones web de forma fácil; 3D.js para crear y visualizar gráficos 3D en una navegador web mediante WebGL; charts.js, una librería para crear gráficos interactivos con una estética bonita; o LaTeX.js, para añadir fórmulas matemáticas de LaTeX a la web.
También existen varios frameworks (bibliotecas de interfaz de usuario), que permiten estructurar la forma en la que se construyen aplicaciones web completas. Un ejemplo sería React.js, para construir componentes reutilizables en las aplicaciones web. Otros ejemplos: Vue.js, Angular o Next.js.
Lado del servidor
Desde la aparición del entorno de ejecución Node.js, en 2009, JavaScript también se usa como un lenguaje de programación en el «lado del servidor» (server-side, en inglés). Este entorno permite crear aplicaciones web completas y dinámicas, con lo que JavaScript se convirtió en un lenguaje de uso general.
De hecho, Node.js es uno de los entornos de ejecución de JavaScript más populares, aunque ya han nacido alternativas. Tal es es el caso de Deno, también creado por Ryan Dahl, al que le dio un mayor enfoque en la seguridad y la productividad. Además, Deno cuenta con soporte para TypeScript.
Con Node.js podemos usar JavaScript para construir servidores web, crear APIs REST y GraphQL, interactuar con bases de datos, procesar datos, realizar cálculos, manipular archivos o desarrollar aplicaciones en tiempo real.
En el escritorio
JavaScript no se limita a los navegadores web o servidores. Con Node.js también es posible crear aplicaciones de escritorio multiplataforma que funcionan en Linux, Mac y Windows. Su uso es tan fácil como crear un archivo con el formato JS (extensión .js
) y ejecutarlo en la terminal con el comando node
.
Además, existen algunos frameworks que facilitan la creación de programas con interfaz gráfica utilizando HTML, CSS y JavaScript. Un ejemplo destacado es Electron, con el que se han creado populares editores de código y clientes de chat. Para funcionar, combina el motor de Chromium (V8) con Node.js.
Soporte en los navegadores
Cada navegador web incorpora su propio motor de ejecución, encargado de interpretar y ejecutar el código. Por ejemplo, Firefox usa el motor SpiderMonkey; los navegadores web basados en Chromium (como Chrome o Edge) usan V8; y el motor de Safari se llama JavaScriptCore, también conocido como Nitro.
Los navegadores modernos no soportan JavaScript de la misma manera, a pesar de que la estandarización con ECMAScript haya mejorado su coherencia. El problema sucede en las distintas versiones que hay, es decir, en aquellos usuarios que no tengan el navegador actualizado y estén usando una versión antigua.
Además, JavaScript viene activado por defecto en casi todos los navegadores web. Sin embargo, si el usuario lo requiere, podrá desactivarlo, ya sea por motivos de seguridad o de privacidad. Al desactivarlo, es posible que muchas páginas web pierdan parcial o totalmente su funcionalidad.
Las limitaciones de JavaScript
Cuando se usa JavaScript en el navegador, existe una serie de limitaciones que conviene conocer. Se trata de limitaciones hechas a propósito para proteger la seguridad del usuario. De esta manera, se evita que una página web maliciosa pueda acceder a información privada con malas intenciones.
- No tiene acceso a los archivos del disco
- No tiene acceso a funciones del sistema operativo
- No tiene acceso directo al hardware
- No tiene acceso a servidores de terceros
- Depende del navegador web y de su motor
Estas limitaciones no existen si usamos JavaScript en un servidor mediante un entorno de ejecución como Node.js. En este caso, sí se puede leer y escribir archivos del disco, realizar solicitudes de red, etc. Pero como lenguaje de programación, JavaScript tiene limitaciones inherentes:
- Rendimiento limitado en tareas intensivas
- Modelo de un solo hilo (single-threaded)
- El recolector de basura no es predecible
- Tipado débil y dinámico (i.e., “5” + 2 = “52”)