Semua ArtikelJavaScript / TypeScript
20 Februari 2025·8 menit baca

JavaScript Modern: Fitur ES2024 yang Wajib Kamu Tahu

JavaScript terus berkembang pesat. Dari ES2020 hingga ES2024, banyak fitur baru yang menyederhanakan kode dan meningkatkan kemampuan bahasa secara signifikan.

1. Object.groupBy & Map.groupBy (ES2024)

Fitur yang paling banyak ditunggu! Akhirnya ada cara native untuk mengelompokkan array berdasarkan kriteria tertentu, tanpa perlu reduce yang verbose.

ts·Object.groupBy
const products = [
  { name: "Laptop", category: "electronics", price: 1500 },
  { name: "Phone", category: "electronics", price: 800 },
  { name: "Shirt", category: "clothing", price: 50 },
];

const byCategory = Object.groupBy(products, ({ category }) => category);
// { electronics: [...], clothing: [...] }

const byPriceRange = Object.groupBy(products, ({ price }) => {
  if (price < 100) return "budget";
  if (price < 500) return "mid-range";
  return "premium";
});

2. Array Methods Immutable (ES2023)

Array methods baru yang mengembalikan array baru tanpa mutasi — lebih aman untuk React state management.

ts·Immutable Array Methods
const fruits = ["apple", "banana", "cherry"];

// toSorted() — sort tanpa mutasi original
const sorted = fruits.toSorted();

// toReversed() — reverse tanpa mutasi
const reversed = fruits.toReversed();

// with() — ganti satu element tanpa mutasi
const updated = fruits.with(0, "avocado");
// ["avocado", "banana", "cherry"]

// Sangat berguna di React!
setItems(prev => prev.with(index, newValue));
setItems(prev => prev.toSorted((a, b) => a.name.localeCompare(b.name)));

3. Promise.withResolvers (ES2024)

ts·Promise.withResolvers
// ✅ ES2024 — Clean
const { promise, resolve, reject } = Promise.withResolvers();

function waitForButton(buttonId: string) {
  const { promise, resolve } = Promise.withResolvers<string>();

  document.getElementById(buttonId)?.addEventListener(
    "click",
    () => resolve("clicked!"),
    { once: true }
  );

  return promise;
}

4. structuredClone (ES2022)

Deep clone yang mudah tanpa library eksternal. Lebih baik dari JSON.parse(JSON.stringify()) karena mendukung Date, Map, Set, RegExp, dan circular references.

ts·structuredClone
const original = {
  name: "Data",
  date: new Date(),
  map: new Map([["key", "value"]]),
  nested: { arr: [1, 2, { deep: true }] }
};

const clone = structuredClone(original);

// Modifikasi clone tidak memengaruhi original
clone.nested.arr.push(4);
console.log(original.nested.arr); // [1, 2, {deep:true}] — tidak berubah!
🚀 Semua fitur di atas sudah didukung di semua browser modern dan Node.js terbaru. Mulai gunakan sekarang tanpa perlu polyfill!