Символ JavaScript (з прикладами)

У цьому посібнику ви дізнаєтеся про символ JavaScript на прикладах.

Символ JavaScript

JavaScript ES6 представив новий примітивний тип даних, який називається Symbol. Символи незмінні (не можуть бути змінені) і є унікальними. Наприклад,

 // two symbols with the same description const value1 = Symbol('hello'); const value2 = Symbol('hello'); console.log(value1 === value2); // false

Хоча значення1 і значення2 містять однаковий опис, вони різні.

Створення символу

Ви використовуєте Symbol()функцію для створення 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)

Символи не включені в для… у циклі

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і проблем із дублюванням не буде. Наприклад,

 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))

Цікаві статті...