--- title: Symbol.for() slug: Web/JavaScript/Reference/Global_Objects/Symbol/for translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/for ---
Метод Symbol.for(key) ищет ранее созданный разделяемый символ по заданному ключу и возвращает его, если он найден. В противном случае создаётся новый разделяемый символ для данного ключа в глобальном реестре символов.
Symbol.for(key);
В противоположность вызову Symbol(), функция Symbol.for() создаёт символ, доступный в глобальном списке реестра символов. Symbol.for() не создаёт новый символ при каждом вызове, вместо этого, метод сначала проверяет, существует ли символ с заданным идентификатором в реестре — и возвращает его, если тот присутствует. Если символ с заданным ключом не найден, Symbol.for() создаст новый глобальный символ.
Глобальный реестр символов — это список со следующей структурой записей и пустой при инициализации:
| Поле | Значение |
|---|---|
| [[key]] | Строка, используемая в качестве идентификатора. |
| [[symbol]] | Символ, хранящийся глобально. |
Symbol.for("foo"); // создаёт новый глобальный символ
Symbol.for("foo"); // возвращает символ, созданный прежде
// Одинаковый глобальный символ, но не локальный
Symbol.for("bar") === Symbol.for("bar"); // true
Symbol("bar") === Symbol("bar"); // false
// Идентификатор также используется в качестве описания
var sym = Symbol.for("mario");
sym.toString(); // "Symbol(mario)"
Чтобы предотвратить конфликт имён ваших глобальных символов и глобальных символов из других библиотек, может оказаться неплохой идеей использование префиксов:
Symbol.for("mdn.foo");
Symbol.for("mdn.bar");
| Спецификация | Статус | Комментарий |
|---|---|---|
| {{SpecName('ES6', '#sec-symbol.for', 'Symbol.for')}} | {{Spec2('ES6')}} | Изначальное определение. |
{{Compat}}