0Pricing
JavaScript Academy · Урок

Глобальный реестр 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 — локальная установка не требуется.

Все уроки этого курса

  1. Создание уникальных Symbol
  2. Symbol в качестве ключей объектов
  3. Глобальный реестр Symbol
  4. Хорошо известные Symbol
← Назад к JavaScript Academy