A JavaScriptben a szimbólumok egyedi adattípusok, amelyek segítségével objektumtulajdonságok azonosítóit lehet létrehozni. A szimbólumok nem olyanok, mint a karakterláncok vagy a számok, és nem konvertálhatók ilyen adattípusokká. Ez teszi őket ideálissá azonosítók létrehozásához.
Szimbólumok használata Javascriptben
Amikor létrehoz egy szimbólumot, opcionálisan megadhatja annak leírását. Ez hasznos a hibakereséshez, de nem kötelező.
A szimbólum létrehozása egyszerű.
const mySymbol = Symbol();
Leírással együtt szimbólumot is létrehozhat.
const mySymbol = Symbol("my description");
Ha több szimbólumot hoz létre ugyanazzal a leírással, akkor ezek különböző értékek lesznek.
const sym1 = Symbol("foo");
const sym2 = Symbol("foo");
// false
console.log(sym1 === sym2);
Mitől egyedi a Symbols
A szimbólumokat gyakran használják objektumtulajdonságok azonosítójaként. Ennek az az oka, hogy a szimbólumok garantáltan egyediek, és nem konvertálják őket karakterláncokká.
const obj = {};
obj[mySymbol] = "bar";
// "bar"
console.log(obj[mySymbol]);
Használhat szimbólumokat az objektumtulajdonságok kulcsaként, de nem használhatja őket tulajdonságnévként (kulcsként) a JSON-ban.
const sym = Symbol("foo");
const obj = { [sym]: "bar" };
// {}
console.log(JSON.stringify(obj));
A szimbólumok nem felsorolhatók, így nem jelennek meg, ha egy tárgyon for-in hurkot használ.
const obj = {};
obj[Symbol("a")] = "a";
obj[Symbol("b")] = "b";
for (var key in obj) {
// undefined
console.log(key);
}
Az Object.getOwnPropertySymbols használatával lekérheti az objektumon lévő összes szimbólum tömbjét.
const obj = {};
obj[Symbol("a")] = "a";
obj[Symbol("b")] = "b";
const symbols = Object.getOwnPropertySymbols(obj);
// [Symbol(a), Symbol(b)]
console.log(symbols);
Szimbólum használata iterátorként
A jól ismert Symbol.iterator segítségével iterátorként használható szimbólumot kaphatunk.
const arr = [1, 2, 3];
const it = arr[Symbol.iterator]();
// { value: 1, done: false }
console.log(it.next());
// { value: 2, done: false }
console.log(it.next());
// { value: 3, done: false }
console.log(it.next());
// { value: undefined, done: true }
console.log(it.next());
Valósabb példa
Létrehozhat saját szimbólumokat, de semmi sem garantálja, hogy egyediek. Ha egyedi szimbólumra van szüksége, használja a Symbol()-ot.
Tegyük fel, hogy van egy tárgya, amely egy személyt ábrázol. Hozzá szeretne adni egy tulajdonságot ehhez az objektumhoz, amely a személy születési évét tárolja, de nem szeretné, hogy ez a tulajdonság megszámlálható legyen. Ezt megteheti egy szimbólummal:
const person = {
name: "John Doe"
};
const birthYear = Symbol("birth year");
person[birthYear] = "1955";
for (var key in person) {
// name
console.log(key);
}
// 1955
console.log(person[birthYear]);