Bu eğitimde, örnekler yardımıyla JavaScript Symbol hakkında bilgi edineceksiniz.
JavaScript Sembolü
JavaScript ES6 , adı verilen yeni bir ilkel veri türü tanıttı Symbol
. Semboller değişmezdir (değiştirilemez) ve benzersizdir. Örneğin,
// two symbols with the same description const value1 = Symbol('hello'); const value2 = Symbol('hello'); console.log(value1 === value2); // false
Değer1 ve değer2'nin her ikisi de aynı açıklamayı içerse de, farklıdırlar.
Sembol Oluşturma
Bir. Oluşturmak için Symbol()
işlevi kullanırsınız Symbol
. Örneğin,
// creating symbol const x = Symbol() typeof x; // symbol
İsteğe bağlı bir dizeyi açıklaması olarak iletebilirsiniz. Örneğin,
const x = Symbol('hey'); console.log(x); // Symbol(hey)
Erişim Sembolü Açıklama
Bir sembolün açıklamasına erişmek için .
operatörü kullanırız . Örneğin,
const x = Symbol('hey'); console.log(x.description); // hey
Nesne Anahtarı Olarak Sembol Ekleme
Köşeli parantez kullanarak bir nesneye anahtar olarak semboller ekleyebilirsiniz ()
. Örneğin,
let id = Symbol("id"); let person = ( name: "Jack", // adding symbol as a key (id): 123 // not "id": 123 ); console.log(person); // (name: "Jack", Symbol(id): 123)
Loop'ta… için semboller dahil değildir
for… in
Döngü yinelerler Sembolik özellikler üzerinde değil. Örneğin,
let id = Symbol("id"); let person = ( name: "Jack", age: 25, (id): 12 ); // using for… in for (let key in person) ( console.log(key); )
Çıktı
isim yaş
Nesnede Sembol Kullanmanın Yararı
Aynı kod parçacığı çeşitli programlarda kullanılıyorsa Symbols
, nesne anahtarında kullanmak daha iyidir . Bunun nedeni, aynı anahtar adını farklı kodlarda kullanabilmeniz ve tekrarlama sorunlarını önleyebilmenizdir. Örneğin,
let person = ( name: "Jack" ); // creating Symbol let id = Symbol("id"); // adding symbol as a key person(id) = 12;
Yukarıdaki programda, person
nesne başka bir program tarafından da kullanılıyorsa, başka bir program tarafından erişilebilen veya değiştirilebilen bir özellik eklemek istemezsiniz. Dolayısıyla kullanarak Symbol
, kullanabileceğiniz benzersiz bir mülk oluşturursunuz.
Şimdi, diğer programın da id adında bir özelliği kullanması gerekiyorsa , sadece adlandırılmış bir Sembol ekleyin id
ve çoğaltma sorunları olmaz. Örneğin,
let person = ( name: "Jack" ); let id = Symbol("id"); person(id) = "Another value";
Yukarıdaki programda, değerleri depolamak için aynı ad kullanılsa bile, Symbol
veri türünün benzersiz bir değeri olacaktır.
Yukarıdaki programda, dizge anahtarı kullanılmışsa, daha sonraki program özelliğin değerini değiştirirdi. Örneğin,
let person = ( name: "Jack" ); // using string as key person.id = 12; console.log(person.id); // 12 // Another program overwrites value person.id = 'Another value'; console.log(person.id); // Another value
Yukarıdaki programda, ikincisi user.id
önceki değerin üzerine yazmaktadır.
Sembol Yöntemleri
Symbol ile kullanılabilen çeşitli yöntemler vardır.
Yöntem | Açıklama |
---|---|
for() | Mevcut sembolleri arar |
keyFor() | Genel sembol kayıt defterinden paylaşılan bir sembol anahtarı döndürür. |
toSource() | Symbol nesnesinin kaynağını içeren bir dize döndürür |
toString() | Sembolün açıklamasını içeren bir dize verir |
valueOf() | Symbol nesnesinin temel değerini döndürür. |
Örnek: Sembol Yöntemleri
// get symbol by name let sym = Symbol.for('hello'); let sym1 = Symbol.for('id'); // get name by symbol console.log( Symbol.keyFor(sym) ); // hello console.log( Symbol.keyFor(sym1) ); // id
Sembol Özellikleri
Özellikleri | Açıklama |
---|---|
asyncIterator | Bir nesne için varsayılan AsyncIterator'ı döndürür |
hasInstance | Yapıcı nesnenin bir nesneyi örneği olarak tanıyıp tanımadığını belirler |
isConcatSpreadable | Bir nesnenin dizi öğelerine göre düzleştirilmesi gerekip gerekmediğini gösterir |
iterator | Bir nesne için varsayılan yineleyiciyi verir |
match | Bir dizeye karşı eşleşir |
matchAll | Bir dizgeye karşı normal ifadenin eşleşmelerini veren bir yineleyici döndürür |
replace | Bir dizenin eşleşen alt dizelerini değiştirir |
search | Normal ifadeyle eşleşen bir dize içindeki dizini döndürür |
split | Normal bir ifadeyle eşleşen dizinlerde bir dizeyi böler |
species | Türetilmiş nesneler oluşturur |
toPrimitive | Bir nesneyi ilkel bir değere dönüştürür |
toStringTag | Bir nesnenin varsayılan tanımını verir |
description | Sembolün açıklamasını içeren bir dize verir |
Örnek: Sembol Özellikleri Örneği
const x = Symbol('hey'); // description property console.log(x.description); // hey const stringArray = ('a', 'b', 'c'); const numberArray = (1, 2, 3); // isConcatSpreadable property numberArray(Symbol.isConcatSpreadable) = false; let result = stringArray.concat(numberArray); console.log(result); // ("a", "b", "c", (1, 2, 3))