CodeBlanks Logo Icon CodeBlanks

Özet - Symbol

JavaScript kursu · İleri seviye · Ders 71/100

Symbol kullanarak bir nesneye for...in'de görünmeyen özel bir özellik eklersin.

Özet: Symbol

Symbol, JavaScript'in yedinci primitive türüdür: benzersiz, değişmez ve for...in'den gizli. Symbol() her çağrıda yeni bir değer üretir; Symbol.for() ise global kayıt üzerinden paylaşır.

Well-known semboller (Symbol.iterator, Symbol.toPrimitive, Symbol.toStringTag) dilin davranışına kanca atar. Sembol anahtarlar iç meta veri ve enum kategorileri için idealdir; çünkü dize anahtarlarla çakışmaz.

Ne zaman symbol kullanmalısın?

Sembol kullanmanın üç temel nedeni vardır: (1) yanlışlıkla çakışamayacak benzersiz değerler (enum kategorileri), (2) tam kontrolün olmadığı nesnelere meta veri ekleme (kütüphaneler), (3) dil davranışına kanca atma (well-known semboller).

Genel nesne özellikleri için sembol kullanma; hata ayıklamayı zorlaştırır ve serileştirmede kaybolur. Sembol, özel bir amaca hizmet ettiğinde parlar.

Uygulama Eklenti güvenli meta veri ekle

internal adında bir sembol oluştur. cache nesnesine count: 0 dize anahtarını ve [internal]: { ttl: 60 } sembol anahtarını ekle. for...in ile cache'i gez ve dize anahtarlarını yazdır. Sonra sembol anahtarlarını toplayıp yazdır.

Örnek çözümü göster
const internal = Symbol('internal');
const cache = {
  count: 0,
  [internal]: { ttl: 60 }
};
for (let key in cache) {
  console.log(key);
}
console.log(Object.getOwnPropertySymbols(cache));

Kendini test et

  1. Bir kütüphane, kullanıcının nesnesine gizli meta veri eklemek istiyor. En güvenli yol hangisidir?

    • Dize anahtar kullanır; for...in'de görünür
    • Aynı isimde dize anahtar kullanır; çakışma riski var
    • Symbol anahtar kullanır; for...in'de gizli kalır
    • Prototype'a dize ekler
    Cevabı göster

    Symbol anahtar kullanır; for...in'de gizli kalır — Doğru. Sembol anahtarlar for...in ve Object.keys'ten gizli kalır; isim çakışması olmaz.

  2. Paylaşılan sembolle eşitlik göster

    const shared = ____; const other = Symbol.for('shared'); console.log(shared === other);
    Cevabı göster
    const shared = Symbol.for('shared'); const other = Symbol.for('shared'); console.log(shared === other);

İleri seviye bölümündeki tüm dersler