Menu

Node.js и JavaScript: в чём разница?

JavaScript это язык, а Node.js это программа, которая выполняет его вне браузера. Синтаксис одинаковый, но глобальные объекты и встроенные API вокруг вашего кода разные.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

JavaScript это язык программирования, а Node.js это среда выполнения, программа, которая запускает JavaScript вне браузера. Синтаксис, типы и стандартные объекты (Array, Promise, JSON) в обоих случаях одни и те же. Меняется окружение вокруг вашего кода: браузер даёт window и document для работы со страницей, а Node.js даёт global, process, require и модули вроде fs для работы с файлами, серверами и операционной системой.

Глобальные объекты браузера вывели undefined, объекты Node.js вывели object или function, а последняя строка вывела true, потому что в Node.js globalThis и global это один и тот же объект. Вставьте первые шесть строк в консоль браузера, и результаты поменяются местами.

Разница в одной таблице

JavaScript в браузереJavaScript в Node.js
Что этоЯзык, который выполняет движок браузераТот же язык, который выполняет среда Node.js (V8)
Глобальный объектwindowglobal
С чем работаетСтраница: document, DOM, событияКомпьютер: fs, http, process, os
Модули<script type="module">, importrequire (CommonJS) и import (ES модули)
ПакетыСобираются в бандл страницыСтавятся в node_modules через npm
ВводКлики, формы, события клавиатурыАргументы командной строки, стандартный ввод, HTTP запросы
Array, Promise, JSON, setTimeout, consoleДаДа

Чаще всего путаются со строкой про модули. Node.js поддерживает обе системы, require и import, а браузеры понимают только import. Какую выбрать, объясняет страница CommonJS и ES модули.

Язык один и тот же

Функция, которая использует только сам язык, работает везде. В этом блоке нет ничего специфичного для Node, и в браузере он вывел бы те же строки:

Программа вывела {"best":95,"average":85} и Passed: 2 of 3. Spread синтаксис, reduce, шаблонные строки и JSON принадлежат языку, их определяет стандарт ECMAScript, поэтому они есть в любой среде выполнения.

Что есть только в Node.js

Специфичная для Node часть это встроенные модули и глобальные объекты, которые работают с операционной системой:

Программа записала файл, прочитала его обратно и вывела .txt 2 lines, затем пустой список аргументов. Ни доступа к файлам, ни process.argv в браузере нет: страница не может трогать ваш диск.

Какие возможности языка вам доступны

У языка есть версии (ES2015, ES2020, ES2024 и так далее), и каждый движок добавляет новые возможности в своём темпе. В каждый релиз Node.js входит конкретная версия движка V8, поэтому от версии Node.js зависит, что работает: например, Object.groupBy и Array.prototype.findLast требуют свежей версии. Поэтому в таблицах поддержки браузерами Node.js идёт отдельной колонкой рядом с Chrome, Firefox и Safari. Если новый синтаксис падает с SyntaxError или метод оказывается undefined, запустите node --version и обновитесь, прежде чем искать полифилл.

Код, который работает и там, и там

Авторы библиотек иногда проверяют, где выполняется код, прежде чем использовать API конкретного окружения:

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

Когда можно, проверяйте нужную возможность, а не название окружения: typeof fetch === 'function' говорит больше, чем "это Node?". Сегодня и там, и там есть fetch, URL, TextEncoder, setTimeout и structuredClone, так что проверок нужно меньше, чем несколько лет назад.

Частые ошибки

document или window в скрипте Node.js. Получите ReferenceError: document is not defined. Такому коду место в браузере.

require в браузере. В браузерах его нет. Используйте import или сборщик, который превращает вызовы require в один файл.

Мысль, что Node.js это другой язык. Это не так. Если что-то описано в учебнике по JavaScript, оно работает в Node.js, если только не использует DOM.

Часто задаваемые вопросы

Можно ли выучить Node.js, не зная JavaScript?

Не получится. Каждая строка, которую вы пишете в Node.js, это JavaScript, поэтому сначала язык. Когда вы знаете функции, объекты и промисы, Node.js это набор дополнительных API, которые нужно изучить.

Почему в Node.js появляется ошибка "document is not defined"?

document это DOM браузера, а у Node.js нет страницы, которая бы его дала. Код, который обращается к document или window, должен выполняться в браузере или в тестовом окружении, имитирующем DOM, например jsdom.

TypeScript и Node.js это одно и то же?

Нет. TypeScript это типизированная версия JavaScript, которая компилируется в JavaScript. Результат можно запустить в Node.js или в браузере, а свежие версии Node.js умеют запускать многие файлы .ts напрямую, просто отбрасывая типы.

Иллюстрация языков программирования Coddy

Учитесь программировать с Coddy

Начать