Hari 27: Metaprogramming & Symbols
55 min
Last updated 09 Apr 2026
Symbol — Identifier Unik
const ID = Symbol("id");
const PRIVATE = Symbol("private");
const obj = {
[ID]: 12345, // symbol sebagai key
nama: "Budi",
};
console.log(obj[ID]); // 12345
console.log(typeof ID); // "symbol"
console.log(ID.toString()); // "Symbol(id)"
console.log(ID === Symbol("id")); // false — setiap Symbol unik!
Well-known Symbols
class Koleksi {
#items;
constructor(...items) { this.#items = items; }
// Buat Koleksi iterable
[Symbol.iterator]() {
return this.#items[Symbol.iterator]();
}
// Custom toString
[Symbol.toPrimitive](hint) {
if (hint === "string") return `Koleksi(${this.#items.join(", ")})`;
return this.#items.length;
}
}
const k = new Koleksi(1, 2, 3, 4, 5);
console.log([...k]); // [1, 2, 3, 4, 5]
console.log(`${k}`); // Koleksi(1, 2, 3, 4, 5)
console.log(k + 10); // 15
💡
Notice: Symbol.iterator memungkinkan objek custom untuk di-iterate dengan for..of dan spread operator. Iterator harus return objek dengan method next().
Assignment
Buat class Stack yang menggunakan Symbol.iterator agar bisa di-spread dan di-iterate dengan for..of. Tambah elemen lewat push(), hapus dengan pop(), dan iterasi dari atas ke bawah.
Expected output:
Size: 4
4, 3, 2, 1
JS
script.js
Solution
Output