Для чего нужен Symbol()
назначение объекта-обертки Symbol() в JavaScript
 
  
  В этой небольшой статье мы разберем, чем может быть полезен Symbol() в JavaScript.
Данные примитивного типа symbol анонимны, уникальны и неизменяемы. По сути, экземпляр таких данных является уникальным идентификатором, созданным с помощью объекта-обертки Symbol():
let firstSymbol = Symbol();
typeof(firstSymbol); //symbol
Для экземпляра данных symbol можно создать описание, используемое для отладки, но не для доступа к самому символу. Например, так:
let dummy = Symbol("dummy");
console.log(dummy);   // Symbol(dummy)
Чем полезны символы?
Символы позволяют создавать “скрытые” свойства объектов, которые невозможно перезаписать или просмотреть из других частей кода.
Символы можно использовать в качестве уникальных значений вместо строчных и числовых данных:
let statuses = {
    PENDING: Symbol('Pending'),
    REQUESTED: Symbol('Requested'),
    IN_PROGRESS: Symbol('In progress'),
    COMPLETED: Symbol('Completed'),
    ERROR: Symbol('Error')
};
// complete a task
myObject.setStatus(statuses.COMPLETED);
Еще символ можно применить, как вычисляемое имя свойства объетка:
let status = Symbol('status');
let task = {
    [status]: statuses.REQUESTED,
    description: 'Request'
};
console.log(task);
//{description: "Request", Symbol(status): Symbol(Requested)}
Наконец, напоминаю, что символ - это всего-лишь уникальный идентификатор, и существует множество других полезных способов для его использования в коде.
Спасибо за внимание.

 
   
   
   
  