Modest Programmer logo
3 października 2018
Tagi: JavaScript
Kontynuując wpisy o nowościach wprowadzonych w ES6 nie możemy zapomnieć o nowym typie prostym jaki właśnie w ES6 został wprowadzony, jest nim symbol. Zanim pojawił się standard ES6, w JS mieliśmy do dyspozycji 6 różnych typów, były to typy: undefined, null, boolean, number, string oraz obiekt. Symbole to kolejny zupełnie nowy 7 typ w JavaScript.

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.
Autor artykułu:
Kazimierz Szpin
Kazimierz Szpin
Programista. Specjalizuje się w C#, głównie WPF, Windows Forms oraz ASP.NET MVC.
Autor bloga ModestProgrammer.pl
Dodaj komentarz
© Copyright 2018 modestprogrammer.pl. Wszelkie prawa zastrzeżone Design by Kazimierz Szpin