Symbol w JavaScript to unikalny typ danych, używany do tworzenia wyjątkowych identyfikatorów dla właściwości obiektów. Jego główną zaletą jest unikalność – dwa symbole o tej samej nazwie są różne, co zapobiega konfliktom nazw. To sprawia, że Symbol jest idealny do dodawania właściwości do obiektów, zwłaszcza w dużych aplikacjach, gdzie moduły mogą nadpisywać sobie nawzajem właściwości.

let id1 = Symbol("id");
let id2 = Symbol("id");

console.log(id1 === id2);// false

Argument przekazywany do funkcji Symbol jest opcjonalny. Niezależnie od tego, czy argument jest taki sam, czy różny, każde wywołanie Symbol generuje unikalną wartość. To sprawia, że symbole są idealne do bezpiecznego dodawania niestandardowych identyfikatorów do obiektów z zewnętrznych bibliotek.

Przykład:

let person = { name: "Jon", age: 45, job: "Programer", id: 1 };

// Dodając właściwość z użyciem symbolu
let idPerson = Symbol("id");
person[idPerson] = 23; // nie nadpisuje istniejącego klucza 'id'

W tym przypadku, dzięki wykorzystaniu symbolu, dodajemy nową wartość do obiektu person bez ryzyka nadpisania istniejącej właściwości id.

Ukryte właściwości

Symbole w JavaScript mają unikalną cechę, że są „ukryte” – nie są widoczne podczas standardowej iteracji po właściwościach obiektu. Oznacza to, że są one dostępne tylko dla kodu, który je utworzył:

let person = { name: "Jon", age: 45, job: "Programer", id: 1};
let isTerminated = Symbol("isTerminated");
person[isTerminated] = true;
for (let key in person) console.log(key);
/*
Wynik:
name
age
job
id
*/

console.log(Object.keys(person));
// ['name', 'age', 'job', 'id']

W tym przykładzie, isTerminated jest symbolem dodanym do obiektu person, ale nie pojawia się on w pętli for..in ani w wyniku Object.keys(person).

Globalne właściwości

Dodatkowo, używając Symbol.for(), możesz stworzyć symbole, które są globalnie rozpoznawane w całym skrypcie, co pozwala na odwoływanie się do tych samych symboli w różnych częściach kodu:

Symbol.for("id") == Symbol.for("id"); //Wynik true
Symbol("id") == Symbol("id"); // Wynik false

To pokazuje, jak symbole mogą być używane zarówno do tworzenia unikalnych, ukrytych właściwości, jak i do tworzenia globalnych identyfikatorów.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *