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… in
Smyč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 Symbols
v 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 person
objekt 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í Symbol
vytvoří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 id
a 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, Symbol
bude 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.id
př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))