--- title: Символ slug: Glossary/Symbol tags: - ECMAScript2015 - JavaScript - Sharing - Символ - Словник - Тип даних translation_of: Glossary/Symbol original_slug: Glossary/Символ ---

У {{Glossary("JavaScript")}}, символ (Symbol) є {{Glossary("Primitive", "простим типом даних")}}.

Значення типу символ також називають "Символьним значенням". У середовищі виконання JavaScript символьне значення створюється викликом функції {{jsxref("Symbol")}}, яка динамічно створює анонімне, унікальне значення. Символ можна використовувати як властивість об'єкта.

Символ може мати необов'язковий опис, але тільки для відлагодження.

Символьне значення є унікальним ідентифікатором. Наприклад,

// Ось два символи з однаковим описом,
let Sym1 = Symbol("Sym");
let Sym2 = Symbol("Sym");

console.log(Sym1 == Sym2); // повертає "false"
// Символи гарантовано є унікальними.
// Навіть якщо ми створимо багато символів з тим самим описом,
// вони будуть різними значеннями.

Заувага: Якщо ви знайомі з Ruby чи іншою мовою, що має свій аналог “символів” – будь ласка, не плутайте. Символи JavaScript інші.

Символьний тип - це новий функціонал у ECMAScript 2015, і він не має еквіваленту у ECMAScript 5.

У деяких мовах програмування символьний тип даних також називається "атом".

Символи не мають автоматичного перетворення у рядки

Більшість значень у JavaScript підтримують неявне перетворення у рядки. Наприклад, ми можемо викликати alert майже з будь-яким значенням, і це спрацює. Символи особливі. Вони не перетворюються автоматично.

Наприклад,

let Sym = Symbol("Sym");
alert(Sym); // TypeError: Cannot convert a Symbol value to a string

Це “мовний захист” від плутанини, тому що рядки та символи є фундаментально різними, і не повинні випадково перетворюватись один на одного.

Якщо нам дуже потрібно вивести символ, треба викликати на ньому метод .toString().

let Sym = Symbol("Sym");

alert(Sym.toString()); // Symbol(Sym), тепер це працює

Або ми можемо скористатись властивістю символу symbol.description, щоб дістати його опис, наприклад,

let _Sym = Symbol("Sym");

alert(_Sym.description); // Sym

Добревідомі символи

Клас {{jsxref("Symbol")}} має константи для так званих добревідомих символів (well-known symbols). Ці символи дозволяють налаштовувати взаємодію JS з об'єктом, використовуючи їх в якості ключів.

Прикладами добревідомих символів є: {{jsxref("Symbol.iterator")}} для подібних до масивів об'єктів, або {{jsxref("Symbol.search")}} для рядкових об'єктів.

Вони наведені у таблиці специфікації Добревідомі символи:

Глобальний реєстр символів

Методами, що мають доступ до глобального реєстру символів, є {{jsxref("Symbol.for()")}} і {{jsxref("Symbol.keyFor()")}}; це посередники між глобальною таблицею (або "реєстром") символів та середовищем виконання. Реєстр символів переважно збудований інфраструктурою компілятора Javascript, а вміст реєстру символів не доступний для інфраструктури виконання Javascript, окрім як за допомогою цих методів.

Метод Symbol.for(tokenString) повертає символьне значенняз реєстру, а Symbol.keyFor(symbolValue) повертає рядковий токен з реєстру; ці функції зворотні одна одній, тому наступне є істиною:

Symbol.keyFor(Symbol.for("tokenString")) === "tokenString" // true

Дізнайтеся більше

Загальні знання