Перейти до вмісту
51studio
Новини

Що нового в ECMAScript 2025: головні зміни для розробників

7 хв читання
Що нового в ECMAScript 2025: головні зміни для розробників

ECMAScript 2025 (ES16) — це річна порція практичних покращень JavaScript. TC39 затвердив специфікацію у червні 2025. Ось частини, які варто знати.

Нові методи Set

Set нарешті отримав методи для роботи з множинами, яких мав би мати з самого початку. Об'єднання, перетин, різниця і решта. Більше не треба писати їх руками.

javascript
const frontend = new Set(['React', 'Vue', 'Svelte', 'Angular']);
const popular = new Set(['React', 'Vue', 'Node.js', 'Express']);

// Перетин — спільні елементи
frontend.intersection(popular);
// Set {'React', 'Vue'}

// Об'єднання
frontend.union(popular);
// Set {'React', 'Vue', 'Svelte', 'Angular', 'Node.js', 'Express'}

// Різниця — є у frontend, немає у popular
frontend.difference(popular);
// Set {'Svelte', 'Angular'}

// Симетрична різниця
frontend.symmetricDifference(popular);
// Set {'Svelte', 'Angular', 'Node.js', 'Express'}

// Перевірки
frontend.isSubsetOf(popular);      // false
frontend.isSupersetOf(popular);    // false
frontend.isDisjointFrom(popular);  // false

Усі повертають новий Set, не мутуючи оригінал. Код читається чистіше і поводиться передбачувано.

Import Attributes та JSON-модулі

Import Attributes (перейменовані Import Assertions) дозволяють вказати тип імпортованого модуля. Головний кейс — імпорт JSON.

javascript
// Імпорт JSON з атрибутом типу
import config from './config.json' with { type: 'json' };

console.log(config.version); // "1.0.0"

// Динамічний імпорт також підтримує атрибути
const data = await import('./data.json', {
  with: { type: 'json' }
});

Ключове слово with замінило старіший assert. Браузери і Node.js вже постачають новий варіант.with замінило попередній синтаксис assert. Браузери та Node.js вже підтримують новий варіант.

Promise.try

Статичний метод, що обгортає будь-яку функцію, синхронну чи асинхронну, у Promise. Зручно, коли хочеш один шлях обробки помилок для обох.

javascript
// Раніше: доводилось обгортати вручну
function fetchData(id) {
  // Якщо validate() кине помилку синхронно,
  // .catch() її не перехопить
  return Promise.resolve().then(() => {
    validate(id);
    return fetch(`/api/data/${id}`);
  });
}

// Тепер: Promise.try обробляє обидва випадки
function fetchData(id) {
  return Promise.try(() => {
    validate(id); // синхронна помилка — перехоплена
    return fetch(`/api/data/${id}`); // async — теж працює
  });
}

RegExp.escape

Простий метод, якого бракувало роками: екранування спецсимволів у рядку, щоб його безпечно використати в регулярному виразі.

javascript
const userInput = 'price: $100 (USD)';
const escaped = RegExp.escape(userInput);
// 'price\:\ \$100\ \(USD\)'

const regex = new RegExp(escaped);
regex.test('price: $100 (USD)'); // true

Більше не треба тягнути крихітний utility з npm. Це тепер у мові.

Iterator Helpers

Ітератори нарешті отримали методи в стилі масивів: map, filter, take, drop і решту. Працюють ліниво, тому ви не будуєте проміжні масиви по дорозі.

javascript
function* naturals() {
  let n = 1;
  while (true) yield n++;
}

// Перші 5 парних чисел — ліниво, без масивів
const result = naturals()
  .filter(n => n % 2 === 0)
  .take(5)
  .toArray();

console.log(result); // [2, 4, 6, 8, 10]

// Map + forEach на ітераторі Map
const map = new Map([['a', 1], ['b', 2], ['c', 3]]);
map.values()
  .map(v => v * 10)
  .forEach(v => console.log(v)); // 10, 20, 30

Корисно, коли ви проходите велику або нескінченну послідовність і будувати масив було б марнотратством.

Підтримка у браузерах та Node.js

Більшість цих фіч вже у Chrome 126+, Firefox 127+, Safari 18+ та Node.js 22+. Set-методи й Iterator Helpers мають найширше охоплення. Import Attributes із JSON-модулями працюють у Node.js і більшості бандлерів. Promise.try і RegExp.escape з'являються у свіжих релізах рушіїв.

Висновок

ECMAScript 2025 — тихий, але корисний реліз. Set-методи, Iterator Helpers, Promise.try і RegExp.escape кожен закривають прогалину, що дратувала розробників уже давно. Усе доступне в сучасних рушіях. Варто використати.

Схожі статті