0Pricing
JavaScript Academy · Урок

Symbol в качестве ключей объектов

Используйте Symbol для свойств, не конфликтующих между собой.

«Symbol в качестве ключей объектов» — бесплатный урок JavaScript Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения JavaScript Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс JavaScript Academy содержит 4 уроков всего.

Символы в качестве ключей

Символ можно использовать как ключ свойства объекта. Поскольку каждый символ уникален, такое свойство не может случайно пересечься ни с одним строковым ключом.

const id = Symbol("id")
const user = {}
user[id] = 123
console.log(user[id])

Вычисляемые ключи-символы

Чтобы использовать символ в качестве ключа в литерале объекта, заключите его в квадратные скобки как имя вычисляемого свойства.

const id = Symbol("id")
const user = {
  name: "Ann",
  [id]: 99
}
console.log(user[id])

Чтение свойства, заданного символом

Чтобы прочитать такое свойство, необходимо иметь ссылку на тот же символ. Без этой ссылки значение фактически скрыто.

const secret = Symbol("secret")
const obj = { [secret]: "hidden" }
console.log(obj[secret])

Не перечисляются в for-in

Ключи-символы пропускаются циклом for-in. Благодаря этому свойства, заданные символами, не попадают в обычный перебор.

const tag = Symbol("tag")
const obj = { a: 1, b: 2, [tag]: 3 }
for (const key in obj) {
  console.log(key)
}

Пропускаются методом Object.keys

Object.keys возвращает только строковые ключи, поэтому свойства с ключами-символами также исключаются из результата.

const tag = Symbol("tag")
const obj = { a: 1, [tag]: 2 }
console.log(Object.keys(obj))

Скрыты от JSON

JSON.stringify полностью игнорирует ключи-символы, поэтому они никогда не появляются в сериализованном результате. Это делает их полезными для внутренних метаданных.

const meta = Symbol("meta")
const obj = { name: "Bo", [meta]: "internal" }
console.log(JSON.stringify(obj))

Поиск ключей-символов

Чтобы получить список ключей-символов, используйте Object.getOwnPropertySymbols. Этот метод возвращает массив символьных свойств объекта.

const tag = Symbol("tag")
const obj = { a: 1, [tag]: 2 }
const syms = Object.getOwnPropertySymbols(obj)
console.log(syms.length)

Предотвращение конфликтов имён

Ключи-символы позволяют разным библиотекам добавлять свойства в один объект без риска перезаписать свойства друг друга, поскольку их символы различаются.

const libA = Symbol("data")
const libB = Symbol("data")
const shared = {}
shared[libA] = 1
shared[libB] = 2
console.log(shared[libA], shared[libB])

Ключи-символы и разворачивание

Оператор разворачивания объекта копирует и ключи-символы, в отличие от for-in и Object.keys, поэтому учитывайте, что они переносятся при клонировании.

const tag = Symbol("tag")
const src = { a: 1, [tag]: 2 }
const copy = { ...src }
console.log(copy[tag])

Хранение данных, похожих на закрытые

Ключи-символы обеспечивают мягкую форму приватности: получить доступ к данным может только код, содержащий этот символ, поэтому данные не отображаются в обычных списках свойств.

const balance = Symbol("balance")
function makeAccount() {
  const acct = {}
  acct[balance] = 100
  return { acct: acct, key: balance }
}
const a = makeAccount()
console.log(a.acct[a.key])

Удаление свойств с ключами-символами

Свойство с ключом-символом удаляется так же, как любое другое: с помощью оператора delete и ссылки на символ.

const tag = Symbol("tag")
const obj = { [tag]: 5 }
delete obj[tag]
console.log(obj[tag])

Быстрая проверка

Проверьте свои знания о ключах-символах.

Повторение

Повторение: символы обеспечивают безопасные скрытые ключи объектов.

  • Для вычисляемых ключей-символов используйте квадратные скобки
  • Пропускаются операторами for-in, Object.keys и JSON
  • Получаются с помощью Object.getOwnPropertySymbols
  • Отлично подходят для метаданных без конфликтов
const k = Symbol("k")
const o = { [k]: 7 }
console.log(o[k])

Часто задаваемые вопросы

Урок «Symbol в качестве ключей объектов» бесплатный?

Да — полный текст урока «Symbol в качестве ключей объектов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс JavaScript Academy, подпишись на CoddyKit PRO. Курс JavaScript Academy содержит 4 уроков всего.

Чему я научусь в уроке «Symbol в качестве ключей объектов»?

Используйте Symbol для свойств, не конфликтующих между собой. Ты практикуешь JavaScript Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать JavaScript Academy?

Предыдущий опыт не требуется. JavaScript Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Symbol в качестве ключей объектов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке JavaScript Academy?

Да. Каждый урок JavaScript Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

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