Menu

Node.js vs JavaScript: qual é a diferença?

JavaScript é a linguagem; Node.js é um programa que a executa fora do navegador. A sintaxe é idêntica, mas os globais e as APIs nativas em volta do seu código são diferentes.

Esta página tem editores executáveis. Edite, execute e veja a saída na hora.

JavaScript é uma linguagem de programação; Node.js é um runtime, um programa que executa JavaScript fora do navegador. A sintaxe, os tipos e os objetos padrão (Array, Promise, JSON) são os mesmos nos dois. O que muda é o ambiente em volta do seu código: o navegador te dá window e document para trabalhar com uma página web, enquanto o Node.js te dá global, process, require e módulos como fs para trabalhar com arquivos, servidores e o sistema operacional.

Os globais do navegador imprimiram undefined, os do Node.js object ou function, e a última linha true, porque no Node.js globalThis e global são o mesmo objeto. Cole as seis primeiras linhas no console do navegador e os resultados se invertem.

A diferença em uma tabela

JavaScript no navegadorJavaScript no Node.js
O que éA linguagem, executada pelo motor do navegadorA mesma linguagem, executada pelo runtime Node.js (V8)
Objeto globalwindowglobal
Trabalha comA página: document, o DOM, eventosA máquina: fs, http, process, os
Módulos<script type="module">, importrequire (CommonJS) e import (ES modules)
PacotesEmpacotados junto com a páginaInstalados em node_modules com o npm
EntradaCliques, formulários, eventos de tecladoArgumentos de linha de comando, entrada padrão, requisições HTTP
Array, Promise, JSON, setTimeout, consoleSimSim

A linha dos módulos é a que mais confunde. O Node.js suporta os dois sistemas, require e import, enquanto os navegadores só entendem import. A página CommonJS vs ES modules explica qual escolher.

A linguagem é a mesma

Uma função que usa só a linguagem roda em qualquer lugar. Este bloco não tem nada específico do Node, e imprimiria as mesmas linhas em um navegador:

Ele imprimiu {"best":95,"average":85} e Passed: 2 of 3. Spread, reduce, template strings e JSON fazem parte da linguagem, definida pelo padrão ECMAScript, então todo runtime tem.

O que só o Node.js tem

A parte específica do Node é o conjunto de módulos e globais nativos que conversam com o sistema operacional:

Ele escreveu um arquivo, leu de volta e imprimiu .txt 2 lines, depois uma lista vazia de argumentos. Nem o acesso a arquivos nem process.argv existem no navegador, onde uma página não pode mexer no seu disco.

Quais recursos da linguagem você tem

A linguagem tem versões (ES2015, ES2020, ES2024 e assim por diante), e cada motor adiciona recursos novos no seu próprio ritmo. O Node.js traz um V8 específico em cada release, então é a sua versão do Node.js que decide quais recursos funcionam: Object.groupBy e Array.prototype.findLast, por exemplo, precisam de uma versão recente. Por isso uma tabela de compatibilidade lista o Node.js como mais uma coluna ao lado de Chrome, Firefox e Safari. Rode node --version quando uma sintaxe nova falhar com SyntaxError ou um método vier undefined, e atualize antes de partir para um polyfill.

Código que roda nos dois

Quem escreve bibliotecas às vezes verifica onde o código está rodando antes de usar uma API específica do ambiente:

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

Sempre que puder, verifique o recurso de que você precisa, não o nome do ambiente: typeof fetch === 'function' diz mais do que "isto é Node". Os dois têm fetch, URL, TextEncoder, setTimeout e structuredClone hoje, então menos código precisa de verificação do que alguns anos atrás.

Erros comuns

Usar document ou window em um script Node.js. Você recebe ReferenceError: document is not defined. Esse código é para o navegador.

Usar require no navegador. Navegadores não têm require. Use import, ou um bundler que transforma as chamadas de require em um único arquivo.

Achar que Node.js é outra linguagem. Não é. Se um tutorial de JavaScript ensina, funciona no Node.js, a menos que use o DOM.

Perguntas frequentes

Dá para aprender Node.js sem aprender JavaScript?

Na prática, não. Cada linha que você escreve em Node.js é JavaScript, então a linguagem vem primeiro. Depois que você conhece funções, objetos e promises, o Node.js é um conjunto de APIs extras para aprender.

Por que aparece "document is not defined" no Node.js?

document é o DOM do navegador, e o Node.js não tem uma página para te dar um. Código que mexe em document ou window precisa rodar em um navegador, ou em um setup de testes que simula o DOM, como o jsdom.

TypeScript é a mesma coisa que Node.js?

Não. TypeScript é uma versão tipada do JavaScript que compila para JavaScript. Você pode rodar o resultado no Node.js ou em um navegador, e as versões recentes do Node.js também rodam muitos arquivos .ts diretamente, removendo os tipos.

Ilustração das linguagens de programação do Coddy

Aprenda a programar com o Coddy

Começar