--- title: Symbol.for() slug: Web/JavaScript/Reference/Global_Objects/Symbol/for translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/for ---
{{JSRef}}

Метод Symbol.for(key) ищет ранее созданный разделяемый символ по заданному ключу и возвращает его, если он найден. В противном случае создаётся новый разделяемый символ для данного ключа в глобальном реестре символов.

Синтаксис

Symbol.for(key);

Параметры

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

Смотрите также