Szimbólum a Javascriptben

Ismerje meg a szimbólumokat: Az objektumtulajdonságok egyedi adattípusa

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]);