Learning Book

Что такое JavaScript

Один язык — везде

JavaScript — это лёгкий, интерпретируемый язык программирования с функциями первого класса. Изначально он создавался для веб-страниц, но сегодня работает повсюду:

  • Браузер — анимации, формы, динамические интерфейсы
  • Сервер — Node.js, Deno, Bun
  • Мобильные приложения — React Native
  • Desktop — Electron (VS Code, Figma, Slack написаны на нём)
// Один и тот же JS-код работает в браузере и в Node.js
console.log('Привет, мир!')

Главные характеристики

Динамическая типизация — тип переменной определяется во время выполнения, не при объявлении:

let x = 42        // число
x = 'привет'      // теперь строка — и это нормально
x = true          // теперь булево

Прототипное наследование — объекты наследуют от других объектов, а не от классов. Классы в JS — это синтаксический сахар поверх прототипов.

Функции первого класса — функции можно передавать как аргументы, возвращать из других функций, присваивать переменным:

// Функция как аргумент
const numbers = [3, 1, 2]
numbers.sort((a, b) => a - b) // передаём функцию в sort

Однопоточный — весь JS-код выполняется в одном потоке. Асинхронность реализуется через Event Loop, а не через многопоточность.

Это не Java

Несмотря на похожее название, JavaScript и Java — совершенно разные языки.

JavaScriptJava
Динамическая типизацияСтатическая типизация
Прототипное наследованиеКлассовое наследование
Интерпретируется / JIT-компилируетсяКомпилируется в байткод JVM
Запускается в браузере без установкиТребует JVM

Название «JavaScript» — маркетинговый ход 1995 года, чтобы привязаться к популярности Java. Сейчас Oracle владеет торговой маркой «JavaScript», поэтому официальный стандарт называется ECMAScript.

ECMAScript — официальный стандарт

JavaScript стандартизирован организацией Ecma International под названием ECMAScript (ECMA-262). Комитет TC39 — это группа инженеров из браузерных вендоров и крупных компаний (Google, Mozilla, Apple, Microsoft), которые развивают язык.

Версии выходят каждый год в июне:

  • ES5 (2009) — добавил use strict, JSON, Array.forEach
  • ES6 / ES2015 — классы, стрелочные функции, let/const, модули, промисы
  • ES2017async/await
  • ES2020??, ?., BigInt, Promise.allSettled
  • ES2025 — текущая версия
Когда говорят «ES6+», имеют в виду все версии, начиная с ES2015. Большинство современного кода использует ES6+ возможности.
Каждое изменение в JavaScript проходит через 5 стадий (Stage 0–4). Stage 4 означает, что изменение включено в следующую версию стандарта. Например, Optional Chaining (?.) появился как Stage 0 в 2017, прошёл через обсуждения, эксперименты в браузерах, и достиг Stage 4 в 2019. Следить за предложениями можно на [github.com/tc39/proposals](https://github.com/tc39/proposals).