Что такое 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 — совершенно разные языки.
| JavaScript | Java |
|---|---|
| Динамическая типизация | Статическая типизация |
| Прототипное наследование | Классовое наследование |
| Интерпретируется / 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, модули, промисы - ES2017 —
async/await - ES2020 —
??,?.,BigInt,Promise.allSettled - ES2025 — текущая версия
Optional Chaining (?.) появился как Stage 0 в 2017, прошёл через обсуждения, эксперименты в браузерах, и достиг Stage 4 в 2019. Следить за предложениями можно на [github.com/tc39/proposals](https://github.com/tc39/proposals).