31 poin oleh GN⁺ 2025-04-16 | 4 komentar | Bagikan ke WhatsApp
  • JavaScript terus berevolusi pada 2025, dan beberapa fiturnya belum banyak dikenal tetapi sangat berguna
  • Metode helper Iterator yang baru bekerja jauh lebih efisien dalam penggunaan memori saat melakukan transformasi data skala besar
  • Akses dari akhir array dengan at(), penggunaan Promise.withResolvers() yang sederhana, serta structuredClone() untuk deep copy
  • Operasi himpunan untuk Set dan fungsi penanda template string, serta cara penggunaan WeakMap/WeakSet, masih sering terlewat oleh banyak developer

Metode Helper Iterator

  • Chaining seperti arr.filter().map() pada cara lama tidak efisien karena membuat array baru di setiap tahap
  • Bisa ditingkatkan dengan chaining berbasis iterator seperti arr.values().drop(10).take(10).map(...).toArray()
  • Metode utama:
    • drop(): melewati n elemen pertama
    • take(): mengambil hanya n elemen pertama
    • filter(), map(), flatMap(): bekerja mirip dengan metode array
    • reduce(), some(), every(), find(): mendukung pengujian kondisi dan perhitungan akumulatif
    • toArray(): mengubah ke array akhir
  • Safari mulai mendukungnya sejak 31 Maret 2025, tetapi belum semua browser mendukung

Array at()

  • arr.at(n) mirip dengan arr[n], tetapi bisa mengakses dari belakang dengan indeks negatif
  • Contoh: [10, 20, 30].at(-1)30
  • Memungkinkan akses ke elemen terakhir tanpa cara yang merepotkan seperti arr[arr.length - 1]

Promise.withResolvers()

  • Cara lama: menyimpan resolve/reject dari luar pada new Promise((resolve, reject) => { ... })
  • Sekarang bisa: const { promise, resolve, reject } = Promise.withResolvers() untuk penggunaan yang lebih ringkas dan intuitif

Memanfaatkan callback pada String.replace()

  • Argumen kedua dari replace() dan replaceAll() tidak hanya menerima string, tetapi juga fungsi callback
  • Contoh: "X, X, X".replaceAll("X", (match, i) => match + i)"X0, X3, X6"
  • Memungkinkan berbagai penggantian sekaligus → efisien dari sisi performa dan memori

Menukar variabel (Swap)

  • Cara lama: menggunakan variabel temp
  • Cara ringkas: menukar variabel dengan array destructuring lewat [a, b] = [b, a]

structuredClone()

  • Mendukung deep copy yang lebih akurat dan efisien dibanding JSON.stringify() + JSON.parse()
  • Kelebihan:
    • Mendukung NaN, undefined, bigint, dan lainnya
    • Dapat menyalin referensi siklik dengan aman
    • Lebih efisien dalam memori dan kecepatan untuk objek besar

Tagged Template Literals

  • Template string dapat diparse dengan fungsi tertentu
  • Berguna untuk post-processing string dinamis, seperti escape HTML
  • Contoh:
    tag function escapeHtml untuk <br> ${'<br>'}<br> <br>

WeakMap / WeakSet

  • Mirip dengan Map dan Set biasa, tetapi:
    • Hanya mengizinkan objek sebagai key (bukan nilai primitif)
    • Akan dihapus otomatis saat menjadi target GC
  • Cocok saat ada kemungkinan referensi siklik atau ketika perlu menyimpan metadata objek tanpa efek samping

Dukungan operasi himpunan pada Set

Pada JavaScript, kini ditambahkan berbagai operasi logis baru untuk objek Set:

  • difference(): selisih himpunan (A - B)
  • intersection(): irisan (A ∩ B)
  • union(): gabungan (A ∪ B)
  • symmetricDifference(): beda simetris (A △ B)
  • isDisjointFrom(): apakah tidak ada elemen yang tumpang tindih
  • isSubsetOf(): apakah merupakan subset
  • isSupersetOf(): apakah merupakan superset

4 komentar

 
wfedev 2025-04-23

Sepertinya masalah saat mem-parsing literal yang membuat bahkan variabel ikut keluar sebagai string sudah teratasi. Terima kasih sudah berbagi.

 
pompapa 2025-04-17

Contoh: "X, X, X".replaceAll("X", (match, i) => match + i) → "X0, X1, X2"

Contohnya salah. i berisi posisi kecocokan yang ditemukan. Karena itu, hasilnya adalah "X0, X3, X6".

 
xguru 2025-04-17

Oh, benar juga. AI ternyata membuat contoh yang salah. Sudah saya perbaiki. Terima kasih atas koreksinya yang jeli!

 
click 2025-04-16

values terasa mirip seperti Java Stream API, jadi saya bandingkan dan ternyata kalau ukuran array kecil, memfilter tanpa values lebih cepat. Karena berbasis iterator, makin banyak chaining, efek metode yang lewat values sekali juga tampaknya bisa menjadi lebih cepat. Untuk benchmark, silakan lihat https://jsperf.app/dixutu.