В този урок ще научите за JavaScript Symbol с помощта на примери.
JavaScript символ
JavaScript ES6 въведе нов примитивен тип данни, наречен Symbol. Символите са неизменни (не могат да бъдат променяни) и са уникални. Например,
// two symbols with the same description const value1 = Symbol('hello'); const value2 = Symbol('hello'); console.log(value1 === value2); // false
Въпреки че и value1 и value2 съдържат едно и също описание, те са различни.
Създаване на символ
Използвате Symbol()функцията, за да създадете a Symbol. Например,
// creating symbol const x = Symbol() typeof x; // symbol
Можете да предадете незадължителен низ като негово описание. Например,
const x = Symbol('hey'); console.log(x); // Symbol(hey)
Символ за достъп Описание
За достъп до описанието на символ използваме .оператора. Например,
const x = Symbol('hey'); console.log(x.description); // hey
Добавете символ като ключов обект
Можете да добавяте символи като ключ в обект, като използвате квадратни скоби (). Например,
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)
Символите не са включени в за … в Loop
На for… inлиния не обхождане на символични свойства. Например,
let id = Symbol("id"); let person = ( name: "Jack", age: 25, (id): 12 ); // using for… in for (let key in person) ( console.log(key); )
Изход
име възраст
Полза от използването на символи в обект
Ако един и същ кодов фрагмент се използва в различни програми, тогава е по-добре да се използва Symbolsв обектния ключ. Това е така, защото можете да използвате едно и също име на ключ в различни кодове и да избегнете проблеми с дублирането. Например,
let person = ( name: "Jack" ); // creating Symbol let id = Symbol("id"); // adding symbol as a key person(id) = 12;
В горната програма, ако personобектът се използва и от друга програма, тогава не бихте искали да добавите свойство, което може да бъде достъпно или променено от друга програма. Следователно, като използвате Symbol, вие създавате уникално свойство, което можете да използвате.
Сега, ако другата програма също трябва да използва свойство с име id , просто добавете символ с име idи няма да има проблеми с дублирането. Например,
let person = ( name: "Jack" ); let id = Symbol("id"); person(id) = "Another value";
В горната програма, дори ако едно и също име се използва за съхраняване на стойности, Symbolтипът данни ще има уникална стойност.
В горната програма, ако се използваше низовият ключ, тогава по-късната програма щеше да промени стойността на свойството. Например,
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
В горната програма втората user.idзамества предишната стойност.
Символни методи
Със Symbol има различни методи.
| Метод | Описание |
|---|---|
for() | Търси съществуващи символи |
keyFor() | Връща споделен ключ от символ от глобалния регистър на символите. |
toSource() | Връща низ, съдържащ източника на обекта Symbol |
toString() | Връща низ, съдържащ описанието на символа |
valueOf() | Връща примитивната стойност на обекта 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
Свойства на символа
| Имоти | Описание |
|---|---|
asyncIterator | Връща AsyncIterator по подразбиране за обект |
hasInstance | Определя дали обектът на конструктора разпознава обект като негов екземпляр |
isConcatSpreadable | Показва дали обектът трябва да бъде приравнен към елементите на масива |
iterator | Връща итератора по подразбиране за обект |
match | Съвпадения срещу низ |
matchAll | Връща итератор, който дава съвпадения на регулярния израз срещу низ |
replace | Заменя съвпадащи поднизове на низ |
search | Връща индекса в низ, който съответства на регулярния израз |
split | Разделя низ в индексите, които съответстват на регулярен израз |
species | Създава производни обекти |
toPrimitive | Преобразува обект в примитивна стойност |
toStringTag | Дава описание по подразбиране на обект |
description | Връща низ, съдържащ описанието на символа |
Пример: Пример за свойства на символи
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))








