Symbol ile gizli özellikler
Symbol özelliklerinin nasıl gizli sayıldığını ve for...in'de görünmediğini öğrenirsin.
Symbol anahtarlar
Bir symbol, bir nesnenin özelliği için anahtar olabilir. Dize anahtarlardan farklı olarak, symbol anahtarları for...in ve Object.keys() işlemlerinden gizlenir; serileştirmede de görünmezler.
Bu, normal döngülerde görünmemesi gereken iç meta verileri depolamak için idealdir. Sembol anahtarlarına erişmek için Object.getOwnPropertySymbols() kullanırsın; çünkü Object.keys yalnızca dize anahtarları verir.
Object.getOwnPropertySymbols
Sembol anahtarlı özelliklere erişmek için Object.getOwnPropertySymbols(obj) kullanılır. Bu metod nesnedeki tüm sembol anahtarlarını bir dizi olarak verir; sembol yoksa boş dizi döner.
Dize ve sembol anahtarları ayrı yuvalarda yaşar: Object.keys() yalnızca dizeleri, Object.getOwnPropertySymbols() yalnızca sembolleri verir. İkisini birlikte kullanarak nesnenin tüm özelliklerini eksiksiz görebilirsin.
Uygulama Sembol özelliğini gizle ve göster
id adında bir sembol oluştur. user nesnesine name: 'Ayşe' dize anahtarını ve [id]: 101 sembol anahtarını ekle. for...in ile user'ı gez ve anahtarları yazdır (yalnızca name görünmeli). Sonra Object.getOwnPropertySymbols(user) ile sembol anahtarlarını yazdır.
Örnek çözümü göster
const id = Symbol('id');
const user = {
name: 'Ayşe',
[id]: 101
};
for (let key in user) {
console.log(key);
}
console.log(Object.getOwnPropertySymbols(user));
Kendini test et
-
Bir nesnede sembol anahtarlı özellik varsa, for...in döngüsü ne yapar?
- Sembol özelliklerini de gezer
- Sembol özelliklerini atlar
- Hata fırlatır
- Yalnızca sembol özelliklerini gezer
Cevabı göster
Sembol özelliklerini atlar — Doğru. for...in yalnızca dize ve sayı anahtarlarını gezer; sembol anahtarları atlanır.
-
Sembolü anahtar olarak kullan
const secret = Symbol('id'); const user = { name: 'Ayşe', [____]: 42 };Cevabı göster
const secret = Symbol('id'); const user = { name: 'Ayşe', [secret]: 42 }; -
Sembol anahtar özellikleri
- Symbol anahtar
- for...in'de görünmez
- Object.keys()
- Yalnızca dize anahtarları
- Object.getOwnPropertySymbols()
- Sembol anahtarlarını verir
- Sembol özellik
- Dize özellikten ayrı bir yuvada