[ITEM 2] QUESTION: Що таке Symbol?
Тип даних Symbol у JavaScript є унікальним і незмінним примітивним типом даних, який був запроваджений у стандарт ES6 для вирішення завдання створення прихованих і унікальних ідентифікаторів властивостей об'єктів.
Головна особливість символів полягає в тому, що навіть якщо два символи створені з абсолютно однаковим описом або взагалі без нього, вони все одно суворо не рівні між собою. Наприклад, виклик Symbol('desc') завжди повертатиме унікальне значення, і умова Symbol('desc') !== Symbol('desc') завжди поверне істину.
На практиці символи найчастіше використовуються для створення унікальних ключів властивостей об'єктів, які не конфліктуватимуть з іншими властивостями. Це особливо корисно під час розробки бібліотек або додавання метаданих, прихованих від стандартних циклів перебору на зразок for...in.
Для ситуацій, коли необхідно використовувати той самий символ у різних частинах додатка, існує глобальний реєстр символів. Доступ до нього здійснюється через спеціальні методи роботи з глобальним простором імен:
Крім того, у JavaScript існує набір так званих добре відомих символів (well-known symbols), які вбудовані в мову і дозволяють розробникам змінювати поведінку вбудованих механізмів об'єктів.
Яскравим прикладом такого символу є Symbol.iterator, який визначає ітератор за замовчуванням для об'єкта. Реалізувавши цей метод, розробник отримує можливість використовувати свій власний об'єкт у циклі for...of.