Не могу понять что дает объявления Symbol
идентификаторов через for
.
Читал несколько статей, суть разницы не уловил.
В чем разница и в каких случаях полезно через sybmol.for
объявить свойство объекта?
В оф. документах вроде как все описано
В противоположность вызову Symbol(), функция Symbol.for() создаёт символ, доступный в глобальном списке реестра символов. Symbol.for() не создаёт новый символ при каждом вызове, вместо этого, метод сначала проверяет, существует ли символ с заданным идентификатором в реестре — и возвращает его, если тот присутствует. Если символ с заданным ключом не найден, Symbol.for() создаст новый глобальный символ.
То есть по сути, символ сравнивается как и объект, по ссылке. Даже если мы создадим два "одинаковых" символа, они не будут равны
const aSymbol = Symbol('a');
const bSymbol = Symbol('a'); // должны быть равны?
aSymbol === bSymbol; // нет :(
Если создавать символ через Symbol.for
, то мы сможем получить этот символ в другом месте.
function createSymbol(name) {
Symbol.for(name);
}
createSymbol('a');
const aSymbol = Symbol.for('a');
const bSymbol = Symbol.for('a');
aSymbol === bSymbol; // теперь норм
Если говорить простым языком, то Symbol.for
- это просто хранилище для символов, к которому можно обратиться по имени. Сами можете такое сделать с помощью обычного объекта
window.GlobalSymbol = {
store_: {},
for: function(name) {
if(!this.store_[name]) {
this.store_[name] = Symbol(name)
}
return this.store_[name]
}
}
console.log(GlobalSymbol.for('name') === GlobalSymbol.for('name'));
console.log(GlobalSymbol.for('name'));
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Мне на сайте нужно добавить такую функцию для администратора, которая позволяет создавать ему любую форму для отправки пользователямЧто-то...
Столкнулся с такой проблемой,- есть необходимость выполнить некий скрипт на JS, но поскольку в старых версиях IOS для Iphone 6 (Safari версии 8 и ниже...