JavaScript simbols (ar piemēriem)

Š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… inCilpa 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 Symbolsobjekta 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 personobjektu 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, idun 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, Symboldatu 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.idpā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))

Interesanti raksti...