Страницы

Поиск по вопросам

понедельник, 30 марта 2020 г.

Symbol и Symbol.for - в чем разница?

#javascript


Не могу понять что дает объявления Symbol идентификаторов через for.
Читал несколько статей, суть разницы не уловил.
В чем разница и в каких случаях полезно через sybmol.for объявить свойство объекта?
    


Ответы

Ответ 1



В оф. документах вроде как все описано В противоположность вызову 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'));

Комментариев нет:

Отправить комментарий