V tomto výučbe sa na príkladoch dozviete o symbole JavaScript.
Symbol JavaScriptu
JavaScript ES6 predstavil nový primitívny dátový typ s názvom Symbol
. Symboly sú nemenné (nemožno ich meniť) a sú jedinečné. Napríklad,
// two symbols with the same description const value1 = Symbol('hello'); const value2 = Symbol('hello'); console.log(value1 === value2); // false
Aj keď hodnoty1 a value2 obsahujú rovnaký popis, líšia sa.
Vytvorenie symbolu
Pomocou tejto Symbol()
funkcie vytvoríte a Symbol
. Napríklad,
// creating symbol const x = Symbol() typeof x; // symbol
Ako popis môžete vložiť voliteľný reťazec. Napríklad,
const x = Symbol('hey'); console.log(x); // Symbol(hey)
Popis symbolu prístupu
Na prístup k popisu symbolu používame .
operátor. Napríklad,
const x = Symbol('hey'); console.log(x.description); // hey
Pridajte symbol ako kľúč objektu
Symboly môžete pridať ako kľúč do objektu pomocou hranatých zátvoriek ()
. Naprí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 nie sú obsiahnuté v … pre slučku
for… in
Slučka nie je iteráciu symbolických vlastností. Naprí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ýkon
vek mena
Výhoda použitia symbolov v objekte
Ak sa v rôznych programoch používa rovnaký útržok kódu, je lepšie ho použiť Symbols
v kľúči objektu. Je to preto, lebo môžete použiť rovnaký názov kľúča v rôznych kódoch a vyhnúť sa problémom s duplikáciou. Napríklad,
let person = ( name: "Jack" ); // creating Symbol let id = Symbol("id"); // adding symbol as a key person(id) = 12;
Ak vo vyššie uvedenom programe platí, že ak person
objekt používa aj iný program, nechcete pridať vlastnosť, ku ktorej má prístup alebo ktorá môže zmeniť iný program. Preto používaním Symbol
vytvárate jedinečnú vlastnosť, ktorú môžete používať.
Teraz, ak druhý program tiež potrebuje použiť vlastnosť s názvom id , stačí pridať Symbol s názvom id
a nebudú problémy s duplikáciou. Napríklad,
let person = ( name: "Jack" ); let id = Symbol("id"); person(id) = "Another value";
Vo vyššie uvedenom programe, aj keď sa na ukladanie hodnôt používa rovnaký názov, Symbol
bude mať dátový typ jedinečnú hodnotu.
Ak by sa vo vyššie uvedenom programe použil reťazcový kľúč, potom by neskorší program zmenil hodnotu vlastnosti. Naprí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
Vo vyššie uvedenom programe druhá user.id
prepíše predchádzajúcu hodnotu.
Metódy symbolov
So symbolom sú k dispozícii rôzne metódy.
Metóda | Popis |
---|---|
for() | Vyhľadá existujúce symboly |
keyFor() | Vráti zdieľaný kľúč symbolov z globálneho registra symbolov. |
toSource() | Vráti reťazec obsahujúci zdroj objektu Symbol |
toString() | Vráti reťazec obsahujúci popis Symbolu |
valueOf() | Vráti primitívnu hodnotu objektu Symbol. |
Príklad: Metódy symbolov
// 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 symbolov
Vlastnosti | Popis |
---|---|
asyncIterator | Vráti predvolený AsyncIterator pre objekt |
hasInstance | Určuje, či objekt konštruktora rozpozná objekt ako svoju inštanciu |
isConcatSpreadable | Označuje, či má byť objekt sploštený na prvky poľa |
iterator | Vráti predvolený iterátor pre objekt |
match | Zhoduje sa s reťazcom |
matchAll | Vráti iterátor, ktorý poskytuje zhody regulárneho výrazu s reťazcom |
replace | Nahrádza zodpovedajúce podreťazce reťazca |
search | Vráti index v rámci reťazca, ktorý sa zhoduje s regulárnym výrazom |
split | Rozdelí reťazec na indexy, ktoré sa zhodujú s regulárnym výrazom |
species | Vytvára odvodené objekty |
toPrimitive | Skonvertuje objekt na primitívnu hodnotu |
toStringTag | Poskytuje predvolený popis objektu |
description | Vráti reťazec obsahujúci popis symbolu |
Príklad: Vlastnosti symbolov Prí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))