- 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(), penggunaanPromise.withResolvers()yang sederhana, sertastructuredClone()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 pertamatake(): mengambil hanya n elemen pertamafilter(),map(),flatMap(): bekerja mirip dengan metode arrayreduce(),some(),every(),find(): mendukung pengujian kondisi dan perhitungan akumulatiftoArray(): mengubah ke array akhir
- Safari mulai mendukungnya sejak 31 Maret 2025, tetapi belum semua browser mendukung
Array at()
arr.at(n)mirip denganarr[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/rejectdari luar padanew 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()danreplaceAll()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
- Mendukung
Tagged Template Literals
- Template string dapat diparse dengan fungsi tertentu
- Berguna untuk post-processing string dinamis, seperti escape HTML
- Contoh:
tag functionescapeHtmluntuk<br> ${'<br>'}→<br> &lt;br&gt;
WeakMap / WeakSet
- Mirip dengan
MapdanSetbiasa, 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 tindihisSubsetOf(): apakah merupakan subsetisSupersetOf(): apakah merupakan superset
4 komentar
Sepertinya masalah saat mem-parsing literal yang membuat bahkan variabel ikut keluar sebagai string sudah teratasi. Terima kasih sudah berbagi.
Contoh:
"X, X, X".replaceAll("X", (match, i) => match + i) → "X0, X1, X2"Contohnya salah.
iberisi posisi kecocokan yang ditemukan. Karena itu, hasilnya adalah"X0, X3, X6".Oh, benar juga. AI ternyata membuat contoh yang salah. Sudah saya perbaiki. Terima kasih atas koreksinya yang jeli!
valuesterasa mirip seperti Java Stream API, jadi saya bandingkan dan ternyata kalau ukuran array kecil, memfilter tanpavalueslebih cepat. Karena berbasis iterator, makin banyak chaining, efek metode yang lewatvaluessekali juga tampaknya bisa menjadi lebih cepat. Untuk benchmark, silakan lihat https://jsperf.app/dixutu.