Что такое 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', вывод изменится — и это нормальная подсказка, что логика должна жить в другом месте.

Практическая матрица перед началом задачи

Перед тем как писать код, задай себе три вопроса:

  1. Где запускается код: browser или node?
  2. Какие API нужны: DOM, fetch, файловая система, таймеры?
  3. Есть ли ограничение версии среды (старый браузер, старая версия 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, а не выкатывать "на авось".