Symbol
Kunci unik, well-known symbols, dan use case-nya.
Pahami konsepnya
Symbol adalah tipe primitif ke-7 yang selalu UNIK: Symbol() === Symbol() adalah false, meski deskripsinya sama. Kegunaan utamanya: kunci properti objek yang dijamin tidak bertabrakan dengan properti lain — cocok untuk "hidden" metadata.
Well-known symbols adalah konstanta built-in yang mengubah perilaku objek: Symbol.iterator membuat objek bisa di-for-of; Symbol.toPrimitive mengatur konversi; Symbol.hasInstance menyesuaikan instanceof. Kamu jarang menulisnya langsung, tapi JavaScript memakainya di balik layar untuk spread, destructuring, dan for-of.
Praktisnya: Symbol paling sering ditemui sebagai Symbol.iterator saat membuat custom iterable, atau sebagai pengaman properti "private" di library yang tidak boleh diakses dari luar.
Coba contoh kode
const unik1 = Symbol("id");
const unik2 = Symbol("id");
console.log(unik1 === unik2); // false — selalu unik
// sebagai kunci yang aman dari tabrakan
const ID = Symbol("userId");
const user = { [ID]: 42, nama: "Ari" };
console.log(user[ID]); // 42
console.log(Object.keys(user)); // ["nama"] — symbol tersembunyi
// well-known: iterator
const angka = {
*[Symbol.iterator]() {
yield 1; yield 2; yield 3;
}
};
console.log([...angka]); // [1, 2, 3]Symbol sebagai kunci objek tidak muncul di Object.keys() atau JSON.stringify — tersembunyi dari iterasi normal. Computed key [ID]: menggunakan symbol sebagai nama properti.
Latihan singkat
Uji: Symbol("a") === Symbol("a") — harus `false`.