Šioje pamokoje su pavyzdžių pagalba sužinosite apie „JavaScript“ simbolį.
„JavaScript“ simbolis
„JavaScript ES6“ pristatė naują primityvų duomenų tipą, vadinamą Symbol
. Simboliai yra nekintami (negali būti pakeisti) ir yra unikalūs. Pavyzdžiui,
// two symbols with the same description const value1 = Symbol('hello'); const value2 = Symbol('hello'); console.log(value1 === value2); // false
Nors „value1“ ir „value2“ aprašymai yra vienodi, jie skiriasi.
Kuriamas simbolis
Symbol()
Funkciją naudojate norėdami sukurti Symbol
. Pavyzdžiui,
// creating symbol const x = Symbol() typeof x; // symbol
Galite perduoti pasirenkamą eilutę kaip jos aprašą. Pavyzdžiui,
const x = Symbol('hey'); console.log(x); // Symbol(hey)
Prieigos simbolio aprašymas
Norėdami pasiekti simbolio aprašymą, mes naudojame .
operatorių. Pavyzdžiui,
const x = Symbol('hey'); console.log(x.description); // hey
Pridėti simbolį kaip objekto raktą
Naudodami laužtinius skliaustus, galite pridėti simbolių kaip raktą objekte ()
. Pavyzdžiui,
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)
Simboliai neįtraukti į… „Loop“
for… in
Kilpa ne kartoti per Simbolinės savybių. Pavyzdžiui,
let id = Symbol("id"); let person = ( name: "Jack", age: 25, (id): 12 ); // using for… in for (let key in person) ( console.log(key); )
Rezultatas
vardo amžius
Simbolių naudojimo objekte nauda
Jei tas pats kodo fragmentas naudojamas įvairiose programose, tai geriau naudoti Symbols
objekto rakte. Taip yra todėl, kad tą patį rakto pavadinimą galite naudoti skirtinguose koduose ir išvengti dubliavimo problemų. Pavyzdžiui,
let person = ( name: "Jack" ); // creating Symbol let id = Symbol("id"); // adding symbol as a key person(id) = 12;
Ankstesnėje programoje, jei person
objektą taip pat naudoja kita programa, tuomet nenorėtumėte pridėti ypatybės, prie kurios gali prisijungti ar ją pakeisti kita programa. Taigi naudodamiesi Symbol
sukuriate unikalią nuosavybę, kurią galite naudoti.
Dabar, jei kita programa taip pat turi naudoti ypatybę pavadinimu id , tiesiog pridėkite pavadintą simbolį id
ir nebus dubliavimo problemų. Pavyzdžiui,
let person = ( name: "Jack" ); let id = Symbol("id"); person(id) = "Another value";
Ankstesnėje programoje, net jei tas pats pavadinimas naudojamas vertėms saugoti, Symbol
duomenų tipas turės unikalią vertę.
Ankstesnėje programoje, jei buvo naudojamas eilutės raktas, vėlesnė programa būtų pakeitusi nuosavybės vertę. Pavyzdžiui,
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
Ankstesnėje programoje antroji user.id
perrašo ankstesnę vertę.
Simbolių metodai
„Symbol“ yra įvairių būdų.
Metodas | apibūdinimas |
---|---|
for() | Ieško esamų simbolių |
keyFor() | Grąžina bendrojo simbolio raktą iš visuotinio simbolių registro. |
toSource() | Pateikia eilutę, kurioje yra objekto „Symbol“ šaltinis |
toString() | Pateikia eilutę su simbolio aprašymu |
valueOf() | Pateikia pirminę objekto „Symbol“ vertę. |
Pavyzdys: simbolių metodai
// 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
Simbolio ypatybės
Savybės | apibūdinimas |
---|---|
asyncIterator | Grąžina numatytąjį objekto „AsyncIterator“ |
hasInstance | Nustato, ar konstruktoriaus objektas atpažįsta objektą kaip jo egzempliorių |
isConcatSpreadable | Nurodo, ar objektas turėtų būti prilygintas jo masyvo elementams |
iterator | Grąžina numatytąjį objekto iteratorių |
match | Degtukai prieš stygą |
matchAll | Pateikia iteratorių, kuris pateikia eilinės išraiškos atitikmenis nuo eilutės |
replace | Pakeičia suderintas eilutės eilutes |
search | Grąžina eilutės, kuri atitinka reguliariąją išraišką, indeksą |
split | Padalija eilutę ties indeksais, kurie atitinka įprastą išraišką |
species | Kuria išvestinius objektus |
toPrimitive | Konvertuoja objektą į primityvią vertę |
toStringTag | Pateikia numatytąjį objekto aprašymą |
description | Pateikia eilutę su simbolio aprašymu |
Pavyzdys: simbolių ypatybių pavyzdys
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))