JavaScript в 2025 году: что нового?
Экосистема JavaScript продолжает стремительно развиваться. 2025 год принёс разработчикам долгожданные обновления и новые возможности, которые делают язык ещё более мощным и удобным. В этой статье мы разберём ключевые нововведения, которые уже доступны или появятся в ближайшее время, с акцентом на практическое применение в среде Node.js.
1. Temporal API: новая эра работы с датами
Одним из самых значимых нововведений 2025 года стал Temporal API — современная замена устаревшему объекту Date. Temporal решает давние проблемы с мутабельностью, часовыми поясами и парсингом дат.
Основные возможности Temporal:
- Неизменяемость (immutability) — все операции возвращают новый объект.
- Поддержка часовых поясов и календарей (включая не григорианские).
- Точность до наносекунд.
- Удобные методы для сравнения, форматирования и вычислений.
Пример использования в Node.js:
// Создание текущей даты и времени в UTC
const now = Temporal.Now.instant();
console.log(now.toString()); // "2025-06-10T12:30:00.123456789Z"
// Работа с датой без времени
const date = Temporal.PlainDate.from("2025-12-25");
console.log(date.dayOfWeek); // 4 (четверг)
// Сложение месяцев
const futureDate = date.add({ months: 3 });
console.log(futureDate.toString()); // "2026-03-25"
// Разница между датами
const start = Temporal.PlainDate.from("2025-01-01");
const end = Temporal.PlainDate.from("2025-12-31");
const duration = start.until(end);
console.log(duration.total("days")); // 364
2. Декораторы (Stage 3 → Stage 4)
После долгих лет обсуждений декораторы наконец-то достигли финальной стадии принятия в ECMAScript. В 2025 году они становятся полноценной частью языка, что особенно важно для фреймворков (NestJS, Angular) и библиотек.
Декораторы позволяют добавлять метаданные и изменять поведение классов, методов и свойств без изменения их кода.
Пример с Node.js и TypeScript-подобным синтаксисом (уже поддерживается в экспериментальном режиме):
// Декоратор для логирования вызова метода
function log(target, context) {
const methodName = context.name;
const originalMethod = target;
return function (...args) {
console.log(`[LOG] Вызов ${methodName} с аргументами:`, args);
const result = originalMethod.apply(this, args);
console.log(`[LOG] Результат ${methodName}:`, result);
return result;
};
}
class Calculator {
@log
add(a, b) {
return a + b;
}
}
const calc = new Calculator();
calc.add(5, 7);
// [LOG] Вызов add с аргументами: [5, 7]
// [LOG] Результат add: 12
3. Паттерн-матчинг (Pattern Matching) — экспериментальный этап
В 2025 году активно обсуждается и внедряется в экспериментальном режиме паттерн-матчинг — мощная конструкция, знакомая разработчикам на Rust, Haskell или Scala. Она позволяет элегантно обрабатывать сложные условия.
Синтаксис предложения (ещё может измениться):
// Пример паттерн-матчинга для обработки HTTP-статусов
function handleResponse(status) {
match (status) {
when (200) -> console.log("Успех");
when (201) -> console.log("Создано");
when (400, 401, 403) -> console.log("Ошибка клиента");
when (500..599) -> console.log("Ошибка сервера");
default -> console.log("Неизвестный статус");
}
}
// Деструктуризация объектов
function processUser(user) {
match (user) {
when ({ role: "admin", permissions: { write: true } }) -> console.log("Админ с правами записи");
when ({ role: "user", age: < 18 }) -> console.log("Несовершеннолетний пользователь");
default -> console.log("Обычный пользователь");
}
}
Пока эта фича доступна через Babel плагины или экспериментальные флаги Node.js, но ожидается, что к концу 2025 года она войдёт в черновик стандарта.
4. Улучшения в Node.js: производительность и инструменты
Node.js 22 и 23 (релизы 2024-2025 годов) принесли ряд важных улучшений, которые делают серверную разработку ещё эффективнее:
- Встроенная поддержка WebSocket — теперь не нужны сторонние библиотеки вроде
wsдля базовых сценариев. - Улучшенный модуль
node:test— стал полноценной заменой Mocha/Jest для простых проектов. - Оптимизация V8 — повышение производительности на 15-20% для типовых нагрузок.
- Поддержка ESM (ECMAScript Modules) по умолчанию — окончательный переход от CommonJS.
- Новый API для работы с файлами:
fs/promises— полностью асинхронный и промис-ориентированный.
Пример использования нового node:test:
import { describe, it, mock } from 'node:test';
import assert from 'node:assert';
// Функция, которую будем тестировать
function fetchData(url) {
return fetch(url).then(res => res.json());
}
describe('fetchData', () => {
it('должна возвращать данные при успешном запросе', async () => {
// Мокируем глобальный fetch
const mockData = { id: 1, name: 'Test' };
mock.method(global, 'fetch', () =>
Promise.resolve({ json: () => Promise.resolve(mockData) })
);
const result = await fetchData('https://api.example.com/data');
assert.deepStrictEqual(result, mockData);
});
});
5. Прочие заметные нововведения
Помимо перечисленного, в 2025 году стоит обратить внимание на:
- Pipeline operator (|>) — оператор для цепочек вызовов (всё ещё на стадии предложения, но активно тестируется