CodeBlanks Logo Icon CodeBlanks

Symbol.for ve Symbol.keyFor

JavaScript kursu · İleri seviye · Ders 67/100

Global symbol kaydından symbol alma ve anahtarını bulmayı öğrenirsin.

Global symbol kaydı

Symbol() her çağrıda yeni bir sembol üretir. Ama bazen kodun farklı yerlerinde aynı sembolü paylaşmak istersin; bunu bir dize anahtarla tanımlarsın.

Symbol.for('anahtar') önce global kayıtta bu anahtara bakar. Varsa onu döndürür; yoksa yeni bir sembol oluşturup kaydeder ve onu döndürür. Böylece Symbol.for('app') iki kez çağrılsa aynı sembolü verir. Bu semboller uygulamanın tamamında paylaşılır.

Symbol.keyFor

Symbol.keyFor(symbol) tersini yapar: global kayıttaki bir sembolün anahtar dizesini verir. Yani Symbol.keyFor(Symbol.for('token')) çağrısı 'token' döndürür; bu, kayıt mekanizmasını doğrulamanın kolay bir yoludur.

Eğer sembol Symbol() ile (kayıt dışı) oluşturulduysa Symbol.keyFor undefined döndürür. Böylece bir sembolün paylaşılan mı yoksa yerel mi olduğunu kolayca ayırt edebilirsin.

Uygulama Paylaşılan sembol kullan

first değişkenine Symbol.for('config') ile bir sembol al. Symbol.keyFor(first) ile bu sembolün anahtarını yazdır. Sonra second değişkenine Symbol.for('config') ile ikinci bir çağrı yapıp first === second karşılaştırmasını yazdır.

Örnek çözümü göster
const first = Symbol.for('config');
console.log(Symbol.keyFor(first));
const second = Symbol.for('config');
console.log(first === second);

Kendini test et

  1. Symbol.for('app') iki kez çağrılırsa ne olur?

    • Her seferinde yeni bir sembol üretilir
    • İlk çağrı hata fırlatır
    • Aynı sembol döner ve ikisi eşittir
    • undefined döner
    Cevabı göster

    Aynı sembol döner ve ikisi eşittir — Doğru. Symbol.for önce global kayıta bakar; anahtar varsa kayıttaki sembolü döndürür.

  2. Paylaşılan sembol oluştur

    const shared = ____;
    Cevabı göster
    const shared = Symbol.for('token');
  3. Symbol.for ve Symbol.keyFor

    Symbol.for('x')
    Global kayıttan okur ya da oluşturur
    Symbol.keyFor(sym)
    Sembolün anahtarını verir
    Symbol('x')
    Her zaman benzersiz
    Kayıtta yoksa
    keyFor undefined döner

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