Полный цикл в digital

Объект Symbol

Символ или тип Symbol представляет некоторое уникальное значение. Для определения символа применяется конструктор типа Symbol. Например, создадим простейший символ:

const tom = Symbol("Tom");
// Symbol(Tom)
console.log(tom);

Причем каждый символ уникален. Так, попробуем создать два одинаковых символа:

const tom = Symbol("Tom");
// Symbol(Tom)
console.log(tom);  
const tomas = Symbol("Tom");
// Symbol(Tom)
console.log(tomas); 
// false
console.log(tom == tomas);  
// false
console.log(tom === tomas);

Несмотря на то, что оба создаваемых выше в примее символа инициализированы одним и тем же значением, но оба оператора - равенства и эквивалентности при сравнению этих символа возвращают false. То есть символы всегда уникальны.

Символы как идентификаторы свойств объектов

Основной областью применения символов являются определение идентификаторов свойств объектов. То есть, если вкратце, символы позволяют избежать ситуаций, когда несколько свойств объекта имеют одинаковые названия. Возможно, данная ситуация может показаться искусственной: ну как мы можем определить в объекте два одинакоых свойства? Однако если свойства добавляются динамически в довольно большой программе или даже где-то во внешнем коде, который мы не можем контролировать, то задача по контролю за идентификаторами свойств усложняется.

Для примера возьмем следующую задачу: в комании работают три программиста, один из которых старший разработчик, а остальные два - младшие разработчики. Но при этом два из разработчиков имеют одинаковые имена. Скажем, один Том является старшим разработчиком, а Сэм и другой Том - младшие разработчики. Например, мы могли бы представить подобную компанию так:

const company = { 
"Tom": "senior",
"Sam": "junior",
"Tom": "junior"
}
for(developer in company) {
console.log(`${developer} - ${company[developer]}`);
}

Однако консольный вывод покажет, что в нашей компании только два разработчика, поскольку названия двух из них совпадают:

Tom - junior
Sam - junior

Теперь применим символы:

const company = { 
[Symbol("Tom")]: "senior",
[Symbol("Sam")]: "junior",
[Symbol("Tom")]: "junior"
}
const developers = Object.getOwnPropertySymbols(company);
for(developer of developers) {
console.log(`${developer.toString()} - ${company[developer]}`);
}

Для получения всех символов из объекта применяется функция Object.getOwnPropertySymbols(), в которую передается объект. Возвращает эта функция набор символов, которые мы можем перебрать в цикле. Для получения текстового представления символов можно применять метод toString() символа. А для получения значения, как и в общем случае, применяется синтаксис массивов: company[developer]. В итоге мы получим следующий консольный вывод:

Symbol(Tom) - senior
Symbol(Sam) - junior
Symbol(Tom) - junior

Также можно динамически добавлять свойства с символьными идентификаторами в объект:

const company = { };
company[Symbol("Tom")]= "senior";
company[Symbol("Sam")]= "junior";
company[Symbol("Tom")]= "junior";
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг