У цьому посібнику ви дізнаєтеся про символ 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))








