Made by © Syed Arham Raza
BACK TO BLOGS
JavaScript

JavaScript ES2025: Features You Should Know

April 20, 20266 min read
JavaScript ES2025: Features You Should Know

Introduction

JavaScript continues to evolve rapidly. ES2025 brings several exciting features that simplify common patterns and introduce powerful new capabilities.

Pipeline Operator (|>)

Chain function calls in a readable, left-to-right flow:

javascript
// Before — nested calls are hard to read const result = capitalize(trim(removeSpaces(input))); // After — clean pipeline const result = input |> removeSpaces(%) |> trim(%) |> capitalize(%);

Record and Tuple

Immutable data structures built into the language:

javascript
// Records — immutable objects const user = #{ name: "Arham", age: 21 }; // Tuples — immutable arrays const coords = #[40.7128, -74.0060]; // Deep equality comparison works! #{ a: 1 } === #{ a: 1 } // true #[1, 2] === #[1, 2] // true

Decorators

Finally standardized! Add metadata and behavior to classes:

javascript
function log(target, context) { return function (...args) { console.log(`Calling ${context.name}`); return target.apply(this, args); }; } class Calculator { @log add(a, b) { return a + b; } }

Array Grouping

Group array elements with a built-in method:

javascript
const inventory = [ { name: "laptop", category: "electronics" }, { name: "shirt", category: "clothing" }, { name: "phone", category: "electronics" }, ]; const grouped = Object.groupBy( inventory, item => item.category ); // { // electronics: [{ name: "laptop" }, { name: "phone" }], // clothing: [{ name: "shirt" }] // }

Temporal API

A modern replacement for the Date object:

javascript
import { Temporal } from 'temporal-polyfill'; const now = Temporal.Now.plainDateTimeISO(); const birthday = Temporal.PlainDate.from('2004-08-15'); const duration = now.toPlainDate().since(birthday); console.log(`${duration.years} years old`); // Time zones done right const meetingPST = Temporal.ZonedDateTime.from({ timeZone: 'America/Los_Angeles', year: 2026, month: 5, day: 15, hour: 10, minute: 0 });

Promise.withResolvers()

Create promise resolve/reject outside the constructor:

javascript
const { promise, resolve, reject } = Promise.withResolvers(); // Use resolve/reject anywhere setTimeout(() => resolve('Done!'), 1000); const result = await promise;

Conclusion

JavaScript's evolution shows no signs of slowing down. These features address real pain points and bring the language closer to what developers actually need. Start experimenting with polyfills and transpilers to get ahead of the curve!

Syed Arham Raza

Syed Arham Raza

Developer & Tech Enthusiast

Tags

JavaScriptES2025ECMAScriptWeb Development