- Bab 9 dari 12
- 30 menit
- 1 latihan kode
- 4 soal kuis
Destructuring, Spread, dan Enhanced Object Literals
Di bab ini (7 bagian)
Tujuan bab ini
- Mengambil isi array dan objek ke variabel terpisah dengan destructuring, lengkap dengan default, rename, dan nested.
- Memakai destructuring langsung di parameter fungsi dan memberi nilai default pada parameter.
- Membedakan spread (membongkar) dan rest (mengumpulkan) meski sama-sama ditulis
.... - Menulis objek lebih ringkas dengan shorthand property, shorthand method, dan computed property.
Destructuring: membongkar paket
Bayangkan kamu menerima paket berisi tiga barang. Cara lama: buka paket, ambil barang pertama, taruh di meja, ambil barang kedua, dan seterusnya, satu per satu. Destructuring membuatmu bisa bilang, "barang pertama ke tangan kiri, barang kedua ke tangan kanan," dalam satu baris.
Destructuring array
Untuk array, yang menentukan adalah urutan posisi.
Trik populer: menukar nilai dua variabel tanpa variabel sementara.
Destructuring objek
Untuk objek, yang menentukan adalah nama properti, bukan urutan.
Rename dilakukan dengan properti: namaBaru. Bacanya: "ambil nim, simpan sebagai id".
Default dipakai kalau propertinya tidak ada atau bernilai undefined. Rename dan default bisa digabung.
Penting: default hanya berlaku untuk undefined. Kalau nilainya null, 0, atau "", nilai itulah yang dipakai.
Nested destructuring
Data dari API sering bertingkat. Destructuring bisa mengikuti bentuknya.
Perhatikan bahwa alamat: di sini hanya "jalan masuk"; tidak ada variabel bernama alamat yang dibuat. Kalau user.alamat ternyata undefined, baris ini melempar TypeError, jadi beri default alamat: { kota } = {} kalau datanya tidak pasti.
Destructuring di parameter fungsi
Ini pemakaian yang paling sering kamu lihat, misalnya pada props di React. Fungsi menerima satu objek, lalu langsung dibongkar di daftar parameter.
Keuntungannya: urutan argumen tidak penting lagi, dan nama properti sekaligus jadi dokumentasi.
Default parameters
Sebelum ES6, nilai bawaan parameter ditulis manual dengan ||. Masalahnya, || juga mengganti nilai "falsy" yang sah seperti 0.
Default parameter hanya aktif untuk argumen yang tidak diberikan atau undefined. Nilainya juga boleh berupa ekspresi dan boleh merujuk parameter sebelumnya:
Spread dan rest: titik tiga yang sama, arah berlawanan
Keduanya ditulis ..., dan yang membedakan adalah posisinya.
- Spread muncul di tempat nilai dipakai (isi array, isi objek, argumen pemanggilan). Ia membongkar kumpulan jadi elemen-elemen.
- Rest muncul di tempat nilai ditampung (parameter fungsi, sisi kiri destructuring). Ia mengumpulkan sisa elemen jadi satu array atau objek.
Spread
Pada objek, properti yang ditulis belakangan menang. Itulah cara populer "mengubah" objek tanpa menyentuh aslinya. Spread objek resmi masuk di ES2018, sedangkan spread array sudah ada sejak ES6.
Satu catatan: salinan dengan spread itu dangkal (shallow). Objek di dalam objek masih menunjuk ke data yang sama.
Rest
Contoh terakhir sering dipakai untuk membuang properti sensitif sebelum data dikirim. Aturannya: rest harus paling akhir dan hanya boleh satu.
Enhanced object literals
ES6 membuat penulisan objek jauh lebih ringkas.
- Shorthand property: kalau nama variabel sama dengan nama properti, cukup tulis sekali.
- Shorthand method: tulis
sapa() {}tanpa: function. Method ini tetap punyathisnormal, jadi aman dipakai untuk method (beda dengan arrow function). - Computed property: ekspresi di dalam
[ ]dihitung dulu, hasilnya jadi nama properti. Berguna saat nama properti baru diketahui saat program berjalan.
Kesalahan umum
- Mengira destructuring objek ikut urutan. Objek dicocokkan berdasarkan nama, array berdasarkan posisi.
- Bingung arah rename.
{ nim: id }membuat variabelid, bukannim. - Membongkar objek yang
undefined.const { a } = undefinedlangsungTypeError; beri default= {}. - Mengira default berlaku untuk
null. Default hanya untukundefined. - Mengira spread menyalin dalam. Objek bersarang tetap berbagi referensi.
- Menaruh rest di tengah, misalnya
[a, ...b, c], yang langsungSyntaxError.
Rangkuman
- Destructuring array mengambil berdasarkan posisi, destructuring objek berdasarkan nama properti.
- Rename memakai
properti: nama, default memakai= nilai, dan pola bisa bersarang atau langsung dipakai di parameter fungsi. - Default parameter aktif saat argumen tidak diberikan atau
undefined, lebih aman daripada||. - Spread
...membongkar array atau objek; rest...mengumpulkan sisa nilai dan harus paling akhir. - Enhanced object literals: shorthand property, shorthand method, dan computed property
[ekspresi].
Slide 24 sampai 28 dari deck JavaScript. Penjelasan lengkapnya ada di mode Baca.

Selesaikan bab ini
- 1. Baca materi
- 2. Latihan kode (1)
- 3. Kuis (4 soal)
Latihan kode: Olah data profil dengan sintaks ES6
Lengkapi empat fungsi berikut:
ringkasUser(user)memakai destructuring (boleh langsung di parameter). Ambilnama,umur(default17), danalamat.kota(default"Tidak diketahui", juga kalaualamattidak ada). Kembalikan"<nama>, <umur> tahun, <kota>". Contoh:ringkasUser({ nama: "Rina", alamat: { kota: "Klaten" } })menghasilkan"Rina, 17 tahun, Klaten".gabungProfil(lama, baru)mengembalikan objek baru gabungan keduanya (propertibarumenang) tanpa mengubahlama. Pakai spread.jumlahkan(...angka)menerima berapa pun angka dan mengembalikan totalnya. Tanpa argumen hasilnya0.buatField(nama, nilai)mengembalikan objek dengan satu properti bernama sesuai isinama. Contoh:buatField("email", "a@b.c")menghasilkan{ email: "a@b.c" }.
Cek pemahaman
1Setelah baris `const { nim: id } = mhs;`, variabel apa yang dibuat?
2Apa yang ditampilkan kode berikut?
function f(a, b = 5) { return a + b; } console.log(f(1), f(1, null), f(1, undefined));3Apa yang ditampilkan kode berikut?
const [x, ...y] = [1, 2, 3, 4]; const o = { a: 1, b: 2, ...{ b: 9, c: 3 } }; console.log(y.length, o.b);4Fitur apa yang dipakai pada objek `{ [kunci]: "aktif" }`?