Symbol.for()
Метод 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");
Спецификации
Specification |
---|
ECMAScript Language Specification # sec-symbol.for |
Совместимость с браузерами
BCD tables only load in the browser