Symbol możesz stworzyć za pomocą fabryki, nie możesz natomiast tego zrobić w przeciwieństwie do innych typów prostych za pomocą funkcji konstruującej. Jako argument możesz przekazać nazwę symbolu.
let symbol = Symbol();
console.log(symbol); //Symbol()
console.log(typeof symbol); //symbol
let symbol2 = Symbol("symbol2");
console.log(symbol2); //Symbol(symbol2)
console.log(typeof symbol2); //symbol
let symbol3 = Symbol(3);
console.log(symbol3); //Symbol(3)
console.log(typeof symbol3); //symbol
let symbol4 = new Symbol(); //TypeError: Symbol is not a construtor
Ponieważ symbole za każdym razem przyjmują zupełnie nową wartość, można powiedzieć, że ich wartość jest unikatowa.let symbol = Symbol();
let symbol1 = Symbol();
console.log(symbol === symbol1); //false
Nawet nie pomoże przekazanie tych samych wartości w argumencie.let symbo2 = Symbol("symbol");
let symbol3 = Symbol("symbol");
console.log(symbo2 === symbol3); //false
Ok, wiesz już co nieco odnośnie symboli, ale pewnie zastanawiasz się do czego to się może w praktyce przydać. Musisz wiedzieć, że symbole mogą być użyte jako klucze właściwości obiektów.let keyUnique = Symbol();
let simpleObject = {};
simpleObject[keyUnique] = 123;
console.log(simpleObject[keyUnique]); //123
Dzięki temu, że symbol zawsze jest unikalny, masz pewność że nie nadpiszesz żadnej innej właściwości obiektu do którego dodajesz właściwość czy metodę. Także możesz spokojnie dodawać takie właściwości do istniejących obiektów.let keyUnique = Symbol();
let simpleObject = {};
simpleObject[keyUnique] = function () {
return 'My method';
};
console.log(simpleObject[keyUnique]()); //My method
Za pomocą metody getOwnPropertySymbols możesz pobrać wszystkie symbole, które zostały dodane do danego obiektu.let keyUnique = Symbol("1");
let simpleObject = {};
simpleObject[keyUnique] = function () {
return 'My method';
};
let symbols = Object.getOwnPropertySymbols(simpleObject);
console.log(symbols[0]); //Symbol(1)
Dodatkowo symbol posiada 2 bardzo przydatne metody, są nimi Symbol.for() oraz Symbol.keyFor(). Dzięki 1 z nich a dokładnie Symbol.for() możesz stworzyć nowy symbol, a jeśli już taki istnieje zostaje on pobrany.Symbol.for("Symbol1"); //Utworzenie nowego symbolu
let symbol1 = Symbol.for("Symbol1"); //Przypisanie wcześniej utworzonego symbolu do zmiennej symbol1
console.log(symbol1); //Symbol(Symbol1)
2 metoda, czyli Symbol.keyFor() służy do tego, aby na podstawie nazwy zmiennej było można pobrać klucz podany jako argument przy tworzeniu tego symbolu.let symbol1 = Symbol.for("Test");
console.log(Symbol.keyFor(symbol1)); //Test
To wszystko co chciałem Ci przekazać w tym artykule. Zapraszam Cię do kolejnych artykułów z serii podstaw programowania w języku JavaScript.Poprzedni artykuł - Walidacja nip w JavaScript.
Następny artykuł - Klasy w JavaScript.