Что такое JavaScript?
Что такое JavaScript?
Технический фундамент: язык и окружение
Чтобы не путаться дальше, держи в голове четыре уровня:
- язык (JavaScript) — синтаксис и правила выполнения;
- стандарт (ECMAScript) — спецификация языка;
- движок (например, V8) — реализация стандарта, которая исполняет код;
- runtime (браузер, Node.js) — окружение с дополнительными API.
Эта модель помогает быстрее локализовать проблему: ошибка в коде, несовместимость стандарта или отсутствие API в конкретном runtime.
Зачем тебе этот «словарь»
Путаница обычно выглядит так: "в JavaScript нет fetch" или "Node.js — это JavaScript". Но в реальной разработке такие смешения превращаются в баги: код проходит локально, а у части пользователей ломается из-за другой среды выполнения или версии.
Ключевой момент: язык отвечает за синтаксис и поведение выражений, а окружение — за доступные API.
Проверь себя: fetch — это часть JavaScript как языка или API конкретного runtime?
Четыре уровня на примере
JavaScript — язык, ECMAScript — его стандарт. Движок исполняет код по правилам стандарта, а runtime добавляет возможности среды (например, DOM в браузере или файловую систему в Node.js).
const language = 'JavaScript';
const standard = 'ECMAScript';
const engine = 'V8';
console.log(language + ' использует стандарт ' + standard);
console.log('Код исполняет движок ' + engine);
Смотри, что важно: поменяется движок — синтаксис останется тем же, пока движок поддерживает нужную версию стандарта.
Один и тот же JS, но разные возможности
Один и тот же JavaScript-код может запускаться в браузере и на сервере, но доступные API не всегда совпадают. Поэтому перед внедрением фичи важно проверять целевую среду, а не только "работает у меня".
const runtime = 'browser';
const taskType = 'ui-update';
const isCorrectPlace = runtime === 'browser' && taskType === 'ui-update';
console.log(isCorrectPlace ? 'Подходящее окружение' : 'Нужен другой runtime');
Если поменять runtime на 'node', вывод изменится — и это нормальная подсказка, что логика должна жить в другом месте.
Практическая матрица перед началом задачи
Перед тем как писать код, задай себе три вопроса:
- Где запускается код:
browserилиnode? - Какие API нужны: DOM,
fetch, файловая система, таймеры? - Есть ли ограничение версии среды (старый браузер, старая версия Node.js)?
function chooseApi(runtime) {
if (runtime === 'browser') return ['document', 'localStorage', 'fetch'];
if (runtime === 'node') return ['fs', 'path', 'process'];
return [];
}
console.log(chooseApi('browser'));
console.log(chooseApi('node'));
Проверь себя: какой API из списка браузера точно не будет работать в "чистом" Node.js без дополнительных библиотек?
Частые ошибки новичков
- Считать, что "если локально работает, можно деплоить" (локальная среда может отличаться от прод).
- Путать "язык" и "окружение": приписывать DOM/
fsсамому JavaScript. - Делать вывод по одному успешному кейсу и игнорировать несовместимость.
Простой анти‑провал — проверять условия релизной готовности явно:
function releaseDecision(browserSupport, nodeSupport) {
if (browserSupport && nodeSupport) {
return 'release';
}
return 'hold';
}
console.log(releaseDecision(true, false));
console.log(releaseDecision(true, true));
Если поддержка есть только в одной среде, продукт получает нестабильное поведение.
Что будет, если поддержка частичная
Частичная совместимость — коварный кейс: одна часть системы работает, другая нет, и кажется, что "почти готово". На практике это сигнал: нужен fallback или другое решение.
const supportsFeature = {
browser: true,
node: false,
};
const ready = supportsFeature.browser && supportsFeature.node;
console.log(ready ? 'Готово к релизу' : 'Нужен fallback');
Анти-провал: не объясняй проблему фразой "язык плохой", пока не проверил версию среды и доступность API.
Краткий итог
- JavaScript — язык; ECMAScript — стандарт языка.
- Движок исполняет код по стандарту, runtime дает API конкретной среды.
- Один и тот же синтаксис не означает одинаковые возможности в браузере и Node.js.
- Перед задачей полезно проверить среду, нужные API и ограничения по версиям.
- Частичная совместимость — повод добавить
fallback, а не выкатывать "на авось".