Symbol JavaScript (s příklady)

V tomto kurzu se na příkladech dozvíte o symbolu JavaScript.

Symbol JavaScript

JavaScript ES6 představil nový primitivní datový typ s názvem Symbol. Symboly jsou neměnné (nelze je změnit) a jsou jedinečné. Například,

 // two symbols with the same description const value1 = Symbol('hello'); const value2 = Symbol('hello'); console.log(value1 === value2); // false

Ačkoli hodnota 1 a hodnota 2 obsahují stejný popis, jsou odlišné.

Vytváření symbolu

Pomocí této Symbol()funkce vytvoříte a Symbol. Například,

 // creating symbol const x = Symbol() typeof x; // symbol

Volitelný řetězec můžete předat jako jeho popis. Například,

 const x = Symbol('hey'); console.log(x); // Symbol(hey)

Popis symbolu přístupu

Pro přístup k popisu symbolu používáme .operátor. Například,

 const x = Symbol('hey'); console.log(x.description); // hey

Přidejte Symbol jako klíč objektu

Symboly můžete přidat jako klíč do objektu pomocí hranatých závorek (). Například,

 let id = Symbol("id"); let person = ( name: "Jack", // adding symbol as a key (id): 123 // not "id": 123 ); console.log(person); // (name: "Jack", Symbol(id): 123)

Symboly nejsou zahrnuty v pro … ve smyčce

for… inSmyčka není iteraci symbolických vlastností. Například,

 let id = Symbol("id"); let person = ( name: "Jack", age: 25, (id): 12 ); // using for… in for (let key in person) ( console.log(key); )

Výstup

 jméno věk

Výhoda použití symbolů v objektu

Pokud se stejný fragment kódu používá v různých programech, je lepší použít Symbolsv klíči objektu. Je to proto, že můžete použít stejný název klíče v různých kódech a vyhnout se problémům s duplikací. Například,

 let person = ( name: "Jack" ); // creating Symbol let id = Symbol("id"); // adding symbol as a key person(id) = 12;

Pokud je ve výše uvedeném programu personobjekt používán také jiným programem, pak byste nechtěli přidat vlastnost, ke které lze přistupovat nebo ji změnit jiný program. Proto pomocí použití Symbolvytvoříte jedinečnou vlastnost, kterou můžete použít.

Nyní, pokud druhý program také potřebuje použít vlastnost s názvem id , stačí přidat Symbol s názvem ida nebudou problémy s duplikací. Například,

 let person = ( name: "Jack" ); let id = Symbol("id"); person(id) = "Another value";

Ve výše uvedeném programu, i když se pro ukládání hodnot používá stejný název, Symbolbude mít datový typ jedinečnou hodnotu.

Pokud byl ve výše uvedeném programu použit řetězecový klíč, pak by pozdější program změnil hodnotu vlastnosti. Například,

 let person = ( name: "Jack" ); // using string as key person.id = 12; console.log(person.id); // 12 // Another program overwrites value person.id = 'Another value'; console.log(person.id); // Another value

Ve výše uvedeném programu druhá user.idpřepíše předchozí hodnotu.

Metody symbolů

Se Symbolem jsou k dispozici různé metody.

Metoda Popis
for() Vyhledá existující symboly
keyFor() Vrátí sdílený klíč symbolu z globálního registru symbolů.
toSource() Vrátí řetězec obsahující zdroj objektu Symbol
toString() Vrátí řetězec obsahující popis Symbol
valueOf() Vrátí primitivní hodnotu objektu Symbol.

Příklad: Metody symbolů

 // get symbol by name let sym = Symbol.for('hello'); let sym1 = Symbol.for('id'); // get name by symbol console.log( Symbol.keyFor(sym) ); // hello console.log( Symbol.keyFor(sym1) ); // id

Vlastnosti symbolu

Vlastnosti Popis
asyncIterator Vrátí výchozí AsyncIterator pro objekt
hasInstance Určuje, zda objekt konstruktoru rozpozná objekt jako jeho instanci
isConcatSpreadable Označuje, zda by měl být objekt sloučen s jeho prvky pole
iterator Vrátí výchozí iterátor pro objekt
match Shoduje se s řetězcem
matchAll Vrátí iterátor, který získá shody regulárního výrazu s řetězcem
replace Nahrazuje shodné podřetězce řetězce
search Vrátí index v řetězci, který odpovídá regulárnímu výrazu
split Rozdělí řetězec na indexy, které odpovídají regulárnímu výrazu
species Vytvoří odvozené objekty
toPrimitive Převede objekt na primitivní hodnotu
toStringTag Poskytuje výchozí popis objektu
description Vrátí řetězec obsahující popis symbolu

Příklad: Vlastnosti symbolu Příklad

 const x = Symbol('hey'); // description property console.log(x.description); // hey const stringArray = ('a', 'b', 'c'); const numberArray = (1, 2, 3); // isConcatSpreadable property numberArray(Symbol.isConcatSpreadable) = false; let result = stringArray.concat(numberArray); console.log(result); // ("a", "b", "c", (1, 2, 3))

Zajímavé články...