--- 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}}