Menu

Node.js vs JavaScript: qual è la differenza?

JavaScript è il linguaggio; Node.js è un programma che lo esegue fuori dal browser. La sintassi è identica, ma le variabili globali e le API integrate intorno al tuo codice sono diverse.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

JavaScript è un linguaggio di programmazione; Node.js è un runtime, un programma che esegue JavaScript fuori dal browser. Sintassi, tipi e oggetti standard (Array, Promise, JSON) sono gli stessi in entrambi. Cambia l'ambiente intorno al codice: un browser ti dà window e document per lavorare con una pagina web, mentre Node.js ti dà global, process, require e moduli come fs per lavorare con file, server e sistema operativo.

Le globali del browser hanno stampato undefined, quelle di Node.js object o function, e l'ultima riga true, perché in Node.js globalThis e global sono lo stesso oggetto. Incolla le prime sei righe nella console di un browser e i risultati si invertono.

La differenza in una tabella

JavaScript nel browserJavaScript in Node.js
Cos'èIl linguaggio, eseguito dal motore del browserLo stesso linguaggio, eseguito dal runtime Node.js (V8)
Oggetto globalewindowglobal
Lavora suLa pagina: document, il DOM, gli eventiLa macchina: fs, http, process, os
Moduli<script type="module">, importrequire (CommonJS) e import (moduli ES)
PacchettiInclusi nella pagina dal bundlerInstallati in node_modules con npm
InputClic, form, eventi della tastieraArgomenti da riga di comando, standard input, richieste HTTP
Array, Promise, JSON, setTimeout, consoleSìSì

La riga dei moduli è quella che confonde di più. Node.js supporta entrambi i sistemi, require e import, mentre i browser capiscono solo import. La pagina CommonJS e moduli ES spiega quale scegliere.

Il linguaggio è lo stesso

Una funzione che usa solo il linguaggio gira ovunque. Questo blocco non ha niente di specifico di Node, e in un browser stamperebbe le stesse righe:

Ha stampato {"best":95,"average":85} e Passed: 2 of 3. Lo spread, reduce, i template string e JSON fanno parte del linguaggio, definito dallo standard ECMAScript, quindi ogni runtime li ha.

Cosa ha solo Node.js

La parte specifica di Node sono i moduli integrati e le globali che parlano con il sistema operativo:

Ha scritto un file, l'ha riletto e ha stampato .txt 2 lines, poi una lista vuota di argomenti. Né l'accesso ai file né process.argv esistono in un browser, dove una pagina non può toccare il tuo disco.

Quali funzionalità del linguaggio hai

Il linguaggio ha delle versioni (ES2015, ES2020, ES2024 e così via), e ogni motore aggiunge le novità con i suoi tempi. Node.js include un motore V8 preciso per ogni release, quindi è la tua versione di Node.js a decidere quali funzionalità funzionano: Object.groupBy e Array.prototype.findLast, per esempio, ne richiedono una recente. Una tabella di compatibilità dei browser elenca quindi Node.js come una colonna in più accanto a Chrome, Firefox e Safari. Esegui node --version quando una sintassi nuova fallisce con un SyntaxError o un metodo è undefined, e aggiorna prima di cercare un polyfill.

Scrivere codice che gira in entrambi

Chi scrive librerie a volte controlla dove gira il codice prima di usare un'API specifica di un ambiente:

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

Quando puoi, controlla la funzionalità che ti serve, non il nome dell'ambiente: typeof fetch === 'function' dice più di "è Node?". Oggi entrambi hanno fetch, URL, TextEncoder, setTimeout e structuredClone, quindi rispetto a qualche anno fa serve un controllo in meno codice.

Errori comuni

Usare document o window in uno script Node.js. Ottieni ReferenceError: document is not defined. Quel codice va in un browser.

Usare require in un browser. I browser non ce l'hanno. Usa import, oppure un bundler che trasforma le chiamate require in un unico file.

Pensare che Node.js sia un linguaggio diverso. Non lo è. Se un tutorial di JavaScript lo insegna, funziona in Node.js, a meno che non usi il DOM.

Domande frequenti

Posso imparare Node.js senza imparare JavaScript?

Non proprio. Ogni riga che scrivi in Node.js è JavaScript, quindi viene prima il linguaggio. Quando conosci funzioni, oggetti e promise, Node.js è un insieme di API in più da imparare.

Perché ottengo "document is not defined" in Node.js?

document è il DOM del browser, e Node.js non ha una pagina da darti. Il codice che usa document o window deve girare in un browser, oppure in un ambiente di test che simula il DOM, come jsdom.

TypeScript è la stessa cosa di Node.js?

No. TypeScript è una versione tipizzata di JavaScript che si compila in JavaScript. Puoi eseguire il risultato in Node.js o in un browser, e le versioni recenti di Node.js possono anche eseguire direttamente molti file .ts togliendo i tipi.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

Inizia