Menu

Node.js vs JavaScript: ¿cuál es la diferencia?

JavaScript es el lenguaje; Node.js es un programa que lo ejecuta fuera del navegador. La sintaxis es idéntica, pero los globales y las APIs integradas que rodean tu código son distintos.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

JavaScript es un lenguaje de programación; Node.js es un runtime, un programa que ejecuta JavaScript fuera del navegador. La sintaxis, los tipos y los objetos estándar (Array, Promise, JSON) son los mismos en los dos. Lo que cambia es el entorno que rodea tu código: un navegador te da window y document para trabajar con una página web, mientras que Node.js te da global, process, require y módulos como fs para trabajar con archivos, servidores y el sistema operativo.

Los globales del navegador imprimieron undefined, los de Node.js object o function, y la última línea true, porque en Node.js globalThis y global son el mismo objeto. Pega las seis primeras líneas en la consola de un navegador y los resultados se invierten.

La diferencia en una tabla

JavaScript en un navegadorJavaScript en Node.js
Qué esEl lenguaje, ejecutado por el motor del navegadorEl mismo lenguaje, ejecutado por el runtime de Node.js (V8)
Objeto globalwindowglobal
Trabaja conLa página: document, el DOM, eventosLa máquina: fs, http, process, os
Módulos<script type="module">, importrequire (CommonJS) e import (ES modules)
PaquetesEmpaquetados en la páginaInstalados en node_modules con npm
EntradaClics, formularios, eventos de tecladoArgumentos de línea de comandos, entrada estándar, peticiones HTTP
Array, Promise, JSON, setTimeout, consoleSíSí

La fila de módulos es la que más confunde. Node.js soporta los dos sistemas, require e import, mientras que los navegadores solo entienden import. La página CommonJS vs ES modules explica cuál elegir.

El lenguaje es el mismo

Una función que solo usa el lenguaje funciona en cualquier sitio. Este bloque no tiene nada específico de Node, e imprimiría las mismas líneas en un navegador:

Imprimió {"best":95,"average":85} y Passed: 2 of 3. El spread, reduce, los template strings y JSON son parte del lenguaje, definidos por el estándar ECMAScript, así que todos los runtimes los tienen.

Lo que solo tiene Node.js

La parte específica de Node es el conjunto de módulos integrados y globales que hablan con el sistema operativo:

Escribió un archivo, lo volvió a leer e imprimió .txt 2 lines, y después una lista vacía de argumentos. Ni el acceso a archivos ni process.argv existen en un navegador, donde una página no puede tocar tu disco.

Qué funcionalidades del lenguaje tienes

El lenguaje tiene versiones (ES2015, ES2020, ES2024, etc.), y cada motor añade las novedades a su propio ritmo. Node.js incluye un motor V8 concreto en cada release, así que tu versión de Node.js decide qué funcionalidades van: Object.groupBy y Array.prototype.findLast, por ejemplo, necesitan una reciente. Por eso una tabla de compatibilidad de navegadores muestra Node.js como una columna más junto a Chrome, Firefox y Safari. Ejecuta node --version cuando una sintaxis nueva falle con un SyntaxError o un método sea undefined, y actualiza antes de recurrir a un polyfill.

Escribir código que funcione en los dos

Los autores de librerías a veces comprueban dónde se ejecuta su código antes de usar una API propia de un entorno:

const isNode = typeof process !== 'undefined' && process.versions?.node != null;
const isBrowser = typeof window !== 'undefined';

Cuando puedas, comprueba la funcionalidad que necesitas, no el nombre del entorno: typeof fetch === 'function' dice más que "¿esto es Node?". Hoy los dos tienen fetch, URL, TextEncoder, setTimeout y structuredClone, así que hace falta comprobar menos código que hace unos años.

Errores comunes

Usar document o window en un script de Node.js. Obtienes ReferenceError: document is not defined. Ese código pertenece al navegador.

Usar require en un navegador. Los navegadores no lo tienen. Usa import, o un bundler que convierta las llamadas a require en un solo archivo.

Pensar que Node.js es otro lenguaje. No lo es. Si un tutorial de JavaScript lo enseña, funciona en Node.js, salvo que use el DOM.

Preguntas frecuentes

¿Puedo aprender Node.js sin aprender JavaScript?

En la práctica, no. Cada línea que escribes en Node.js es JavaScript, así que el lenguaje va primero. Cuando ya manejas funciones, objetos y promesas, Node.js es un conjunto de APIs extra que aprender.

¿Por qué me sale "document is not defined" en Node.js?

document es el DOM del navegador, y Node.js no tiene una página que darte. El código que toca document o window tiene que ejecutarse en un navegador, o en un entorno de tests que simule el DOM, como jsdom.

¿TypeScript es lo mismo que Node.js?

No. TypeScript es una versión tipada de JavaScript que se compila a JavaScript. El resultado lo puedes ejecutar en Node.js o en un navegador, y las versiones recientes de Node.js también ejecutan muchos archivos .ts directamente, eliminando los tipos.

Ilustración de los lenguajes de programación de Coddy

Aprende a programar con Coddy

Comenzar