Šajā apmācībā jūs uzzināsit par JavaScript simbolu ar piemēru palīdzību.
JavaScript simbols
JavaScript ES6 ieviesa jaunu primitīvu datu tipu ar nosaukumu Symbol
. Simboli ir nemainīgi (tos nevar mainīt) un ir unikāli. Piemēram,
// two symbols with the same description const value1 = Symbol('hello'); const value2 = Symbol('hello'); console.log(value1 === value2); // false
Lai gan 1. vērtībā, gan 2. vērtībā ir viens un tas pats apraksts, tās atšķiras.
Simbola izveide
Jūs izmantojat Symbol()
funkciju, lai izveidotu Symbol
. Piemēram,
// creating symbol const x = Symbol() typeof x; // symbol
Kā aprakstu varat nodot izvēles virkni. Piemēram,
const x = Symbol('hey'); console.log(x); // Symbol(hey)
Piekļuves simbola apraksts
Lai piekļūtu simbola aprakstam, mēs izmantojam .
operatoru. Piemēram,
const x = Symbol('hey'); console.log(x.description); // hey
Pievienot simbolu kā objekta atslēgu
Izmantojot kvadrātiekavas, objektā var pievienot simbolus kā atslēgu()
. Piemēram,
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)
Simboli nav iekļauti … cilnē
for… in
Cilpa nav atkārtot vairāk simboliskas īpašības. Piemēram,
let id = Symbol("id"); let person = ( name: "Jack", age: 25, (id): 12 ); // using for… in for (let key in person) ( console.log(key); )
Rezultāts
vārda vecums
Simbolu izmantošanas objektā priekšrocība
Ja to pašu koda fragmentu izmanto dažādās programmās, tad labāk to izmantot Symbols
objekta atslēgā. Tas ir tāpēc, ka jūs varat izmantot to pašu atslēgas nosaukumu dažādos kodos un izvairīties no dublēšanās problēmām. Piemēram,
let person = ( name: "Jack" ); // creating Symbol let id = Symbol("id"); // adding symbol as a key person(id) = 12;
Iepriekš minētajā programmā, ja person
objektu izmanto arī cita programma, jūs nevēlaties pievienot īpašumu, kuram var piekļūt vai mainīt citu programmu. Tādējādi, izmantojot Symbol
, jūs izveidojat unikālu īpašumu, kuru varat izmantot.
Tagad, ja arī citai programmai ir jāizmanto rekvizīts ar nosaukumu id , vienkārši pievienojiet simbolu ar nosaukumu, id
un nebūs problēmu ar dublēšanos. Piemēram,
let person = ( name: "Jack" ); let id = Symbol("id"); person(id) = "Another value";
Iepriekš minētajā programmā pat tad, ja vērtību glabāšanai tiek izmantots viens un tas pats nosaukums, Symbol
datu tipam būs unikāla vērtība.
Iepriekš minētajā programmā, ja tika izmantota virknes atslēga, tad vēlākā programma būtu mainījusi rekvizīta vērtību. Piemēram,
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
Iepriekš minētajā programmā otrais user.id
pārraksta iepriekšējo vērtību.
Simbolu metodes
Izmantojot Symbol, ir pieejamas dažādas metodes.
Metode | Apraksts |
---|---|
for() | Meklē esošos simbolus |
keyFor() | Atgriež koplietojamo simbolu atslēgu no globālā simbolu reģistra. |
toSource() | Atgriež virkni, kas satur objekta Symbol avotu |
toString() | Atgriež virkni, kurā ir simbola apraksts |
valueOf() | Atgriež objekta Symbol primitīvo vērtību. |
Piemērs: Simbolu metodes
// 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
Simbola rekvizīti
Rekvizīti | Apraksts |
---|---|
asyncIterator | Atgriež objekta noklusējuma AsyncIterator |
hasInstance | Nosaka, vai konstruktora objekts atpazīst objektu kā tā instanci |
isConcatSpreadable | Norāda, vai objekts jāpielīdzina tā masīva elementiem |
iterator | Atgriež objekta noklusējuma iteratoru |
match | Sērkociņi pret stīgu |
matchAll | Atgriež atkārtotāju, kas nodrošina regulārās izteiksmes atbilstību virknei |
replace | Aizstāj virknes saskaņotos apakšvirsrakstus |
search | Atgriež indeksu virknē, kas atbilst regulārajai izteiksmei |
split | Sadala virkni pie indeksiem, kas atbilst regulārajai izteiksmei |
species | Izveido atvasinātus objektus |
toPrimitive | Pārvērš objektu par primitīvu vērtību |
toStringTag | Sniedz objekta noklusējuma aprakstu |
description | Atgriež virkni, kurā ir simbola apraksts |
Piemērs: Simbola rekvizītu piemērs
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))