Symbol yang Dikenal
Sesuaikan perilaku dengan Symbol.iterator dan symbol lainnya.
Symbol yang Dikenal adalah pelajaran JavaScript Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar JavaScript Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus JavaScript Academy mencakup 4 pelajaran total.
Simbol yang Telah Dikenal
Simbol yang telah dikenal adalah simbol bawaan yang disimpan pada objek Symbol. Simbol ini memungkinkan Anda menyesuaikan perilaku objek saat menggunakan fitur bahasa seperti iterasi dan konversi.
console.log(typeof Symbol.iterator)
console.log(typeof Symbol.toPrimitive)Symbol.iterator
Symbol.iterator menentukan cara objek diiterasi oleh perulangan for-of dan operator spread. Array dan teks bawaan sudah menyediakannya.
const arr = [10, 20]
const it = arr[Symbol.iterator]()
console.log(it.next().value)Membuat Objek yang Dapat Diiterasi
Anda dapat menambahkan metode Symbol.iterator yang mengembalikan iterator dengan metode next agar objek apa pun dapat digunakan dalam perulangan for-of.
const range = {
from: 1,
to: 3,
[Symbol.iterator]() {
let cur = this.from
const last = this.to
return {
next() {
return cur <= last ? { value: cur++, done: false } : { value: undefined, done: true }
}
}
}
}
for (const n of range) {
console.log(n)
}Melakukan Iterasi dengan Spread
Karena Symbol.iterator juga mengatur operasi spread, objek yang dapat diiterasi secara khusus dapat diperluas menjadi array.
const nums = {
[Symbol.iterator]() {
let i = 0
return { next() { return i < 3 ? { value: i++, done: false } : { value: undefined, done: true } } }
}
}
console.log([...nums])Symbol.toPrimitive
Symbol.toPrimitive memungkinkan objek mengendalikan cara objek tersebut dikonversi menjadi nilai primitif dalam konteks numerik, teks, atau bawaan.
const money = {
amount: 50,
[Symbol.toPrimitive](hint) {
if (hint === "number") return this.amount
return "$" + this.amount
}
}
console.log(+money)
console.log(money + "")Argumen Petunjuk
Penangan konversi menerima petunjuk berupa number, string, atau default, sehingga Anda dapat mengembalikan nilai yang sesuai untuk setiap situasi.
const obj = {
[Symbol.toPrimitive](hint) {
return hint
}
}
console.log(+obj)
console.log(obj + "")
console.log(String(obj))Symbol.toStringTag
Symbol.toStringTag menyesuaikan teks yang dilaporkan oleh toString bawaan untuk suatu objek, sehingga berguna untuk label jenis khusus.
const widget = {
[Symbol.toStringTag]: "Widget"
}
console.log(Object.prototype.toString.call(widget))Symbol.hasInstance
Symbol.hasInstance memungkinkan kelas atau objek menyesuaikan perilaku operator instanceof.
class Even {
static [Symbol.hasInstance](num) {
return num % 2 === 0
}
}
console.log(4 instanceof Even)
console.log(3 instanceof Even)Fitur Bawaan Juga Menggunakannya
Array, peta, set, dan teks semuanya menerapkan Symbol.iterator. Itulah sebabnya semuanya bekerja dengan lancar bersama for-of dan spread.
const set = new Set([1, 2, 3])
console.log([...set])Mengapa Simbol Ini Penting
Simbol yang telah dikenal merupakan titik ekstensi: simbol ini memungkinkan objek Anda terintegrasi secara alami dengan operasi bahasa bawaan, alih-alih diperlakukan secara khusus.
const list = {
items: ["a", "b"],
[Symbol.iterator]() {
return this.items[Symbol.iterator]()
}
}
for (const x of list) {
console.log(x)
}Menemukannya
Objek Symbol menyediakan simbol-simbol ini sebagai properti statis. Anda dapat merujuknya seperti Symbol.iterator dan Symbol.toPrimitive di mana pun diperlukan.
console.log(typeof Symbol.iterator)
console.log(typeof Symbol.toStringTag)
console.log(typeof Symbol.hasInstance)Pemeriksaan Singkat
Uji pengetahuan Anda tentang simbol yang telah dikenal.
Ringkasan
Ringkasan: Simbol yang telah dikenal menyesuaikan perilaku bahasa.
- Symbol.iterator mengatur for-of dan spread
- Symbol.toPrimitive mengendalikan konversi melalui sebuah petunjuk
- Symbol.toStringTag memberi label pada objek
- Symbol.hasInstance menyesuaikan instanceof
const r = { [Symbol.iterator]() { let i = 0; return { next() { return i < 2 ? { value: i++, done: false } : { value: 0, done: true } } } } }
console.log([...r])Pertanyaan yang Sering Diajukan
Apakah pelajaran “Symbol yang Dikenal” gratis?
Ya — teks lengkap “Symbol yang Dikenal” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus JavaScript Academy, upgrade ke CoddyKit PRO. Kursus JavaScript Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Symbol yang Dikenal”?
Sesuaikan perilaku dengan Symbol.iterator dan symbol lainnya. Kamu berlatih JavaScript Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai JavaScript Academy?
Tidak diperlukan pengalaman sebelumnya. JavaScript Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Symbol yang Dikenal” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran JavaScript Academy ini?
Ya. Setiap pelajaran JavaScript Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Membuat Symbol Unik
- Symbol sebagai Kunci Objek
- Registri Symbol Global
- Symbol yang Dikenal