Глобальный реестр Symbol
Делитесь символами с помощью Symbol.for и keyFor.
«Глобальный реестр Symbol» — бесплатный урок JavaScript Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения JavaScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс JavaScript Academy содержит 4 уроков всего.
Общий реестр
Глобальный реестр символов позволяет создавать символы, общие для всей программы и связанные с ключом, вместо того чтобы каждый раз создавать уникальные символы.
const a = Symbol.for("app.id")
const b = Symbol.for("app.id")
console.log(a === b)Symbol.for
Symbol.for ищет в реестре символ по строковому ключу. Если такой символ существует, он возвращается; в противном случае создаётся и сохраняется новый.
const token = Symbol.for("token")
console.log(token.description)Общая идентичность
В отличие от обычных вызовов Symbol, два вызова Symbol.for с одним и тем же ключом возвращают один и тот же символ, поэтому они считаются равными.
const x = Symbol.for("shared")
const y = Symbol.for("shared")
console.log(x === y)Сравнение с Symbol
Обычный Symbol всегда создаёт новый уникальный символ, а Symbol.for повторно использует существующую запись реестра для того же ключа.
const local1 = Symbol("k")
const local2 = Symbol("k")
const global1 = Symbol.for("k")
const global2 = Symbol.for("k")
console.log(local1 === local2)
console.log(global1 === global2)Symbol.keyFor
Symbol.keyFor выполняет обратную операцию: получив символ из реестра, он возвращает строковый ключ, использованный для его создания.
const s = Symbol.for("config")
console.log(Symbol.keyFor(s))keyFor и локальные символы
Для символа, отсутствующего в реестре, Symbol.keyFor возвращает undefined. Это позволяет проверить, является ли символ глобальным.
const local = Symbol("private")
const global = Symbol.for("public")
console.log(Symbol.keyFor(local))
console.log(Symbol.keyFor(global))Общий доступ между модулями
Реестр является общим даже для разных частей приложения, например отдельных модулей, поэтому он полезен для общеизвестных ключей координации.
function getKey() { return Symbol.for("event.bus") }
console.log(getKey() === Symbol.for("event.bus"))Соглашения об именовании
Поскольку реестр является глобальным, добавляйте префиксы к ключам, чтобы избежать конфликтов с другими библиотеками, например используя пространство имён с названием приложения.
const a = Symbol.for("myapp.user.id")
const b = Symbol.for("myapp.user.id")
console.log(a === b)Реестр сохраняется
После регистрации ключа каждый последующий вызов Symbol.for с этим ключом возвращает тот же символ в течение всего времени работы программы.
Symbol.for("once")
const again = Symbol.for("once")
console.log(Symbol.keyFor(again))Когда использовать реестр
Используйте реестр, когда независимым частям кода необходимо договориться об одном и том же символе по имени. Используйте обычный Symbol, когда важнее уникальность и приватность.
const sharedFlag = Symbol.for("feature.enabled")
const privateFlag = Symbol("feature.enabled")
console.log(sharedFlag === Symbol.for("feature.enabled"))
console.log(privateFlag === Symbol.for("feature.enabled"))Сочетание с ключами объектов
Символы из реестра также работают как ключи объектов, позволяя совместно использовать метаданные, которые любой взаимодействующий модуль может прочитать, повторно получив этот символ.
const META = Symbol.for("meta")
const obj = { [META]: "shared data" }
console.log(obj[Symbol.for("meta")])Быстрая проверка
Проверьте свои знания о реестре.
Повторение
Повторение: глобальный реестр предоставляет общий доступ к символам по ключу.
- Symbol.for повторно использует или создаёт символ в реестре
- Один и тот же ключ возвращает один и тот же символ
- Symbol.keyFor возвращает ключ или undefined для локальных символов
- Используйте пространства имён в ключах, чтобы избежать конфликтов
const a = Symbol.for("k")
console.log(Symbol.keyFor(a))Часто задаваемые вопросы
Урок «Глобальный реестр Symbol» бесплатный?
Да — полный текст урока «Глобальный реестр Symbol» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс JavaScript Academy, подпишись на CoddyKit PRO. Курс JavaScript Academy содержит 4 уроков всего.
Чему я научусь в уроке «Глобальный реестр Symbol»?
Делитесь символами с помощью Symbol.for и keyFor. Ты практикуешь JavaScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать JavaScript Academy?
Предыдущий опыт не требуется. JavaScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Глобальный реестр Symbol»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке JavaScript Academy?
Да. Каждый урок JavaScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Создание уникальных Symbol
- Symbol в качестве ключей объектов
- Глобальный реестр Symbol
- Хорошо известные Symbol