Гид по технологиям

Словари в JavaScript: определение, синтаксис и практические приёмы

4 min read Programming Обновлено 05 Dec 2025
Словари в JavaScript — создание и использование
Словари в JavaScript — создание и использование

Ноутбук на столе с чашкой кофе и кодом на экране

Что такое словарь

Словарь — структура данных, которая хранит связанные пары ключ–значение. Ключ используется для быстрого поиска соответствующего значения. В контексте JavaScript под словарём обычно понимают обычный объект (Object) или коллекцию Map.

Определение в одну строку: словарь — это контейнер значений, индексируемый по ключам вместо числовых индексов.

Важно: обычный Object имеет прототипную цепочку, поэтому некоторые свойства унаследованы; Map не наследует своих ключей и подходит для любых типов ключей.

Создание словаря

В JavaScript нет ключевого слова dictionary. Самые распространённые способы создания словаря:

Простой объект (литерал):

let emptyDictionary = {};

Через конструктор Object:

let dictionary = new Object();

Инициализация со значениями:

let petDictionary = {
  "Pidgey": { Age: 0.5, Color: "Gray", Gender: "Male" },
  "Mocha": { Age: 0.5, Color: "Brown", Gender: "Female" }
};

Можно использовать нестроковые ключи в виде чисел или булевых значений (они будут приведены в строку у Object):

let wcDictionary = {
  1: { Team: "Argentina" },
  2: { Team: "France" }
};

let dictBool = {
  true: { Message: "Confirmed" },
  false: { Message: "Denied" }
};

Альтернатива — коллекция Map, если нужны ключи произвольного типа и гарантированное поведение без прототипных свойств:

let map = new Map();
map.set({ id: 1 }, "objectKey");
map.set(1, "numberKey");

Добавление значений в словарь

Чтобы добавить или обновить элемент в объекте:

dictionary[new_key] = new_value;

petDictionary["Apples"] = { Age: 2, Color: "Green", Gender: "Male" };
wcDictionary[3] = { Team: "Morocco" };

Для Map используются методы set и get:

map.set("Mocha", { Age: 0.5, Color: "Brown" });

Примечание: в Object ключи приводятся к строкам, в Map — сохраняют тип.

Получение значения по ключу

Чтение значения из объекта выглядит так:

let dictionaryValue = petDictionary["Mocha"];
console.log(dictionaryValue);

В консоли будет объект со всеми полями значения.

Лог консоли с выводом значения элемента словаря

Для Map используется метод get:

let val = map.get("Mocha");

Обход всех элементов словаря

Чтобы получить список ключей у объекта, используйте Object.keys():

console.log(Object.keys(petDictionary));

В консоли появится массив ключей:

Лог консоли с ключами словаря

Типичный цикл обхода значений по ключам:

for (const key of Object.keys(petDictionary)) {
  console.log(key + ":");
  console.log(petDictionary[key]);
}

Для Map есть удобный итератор entries():

for (const [key, value] of map.entries()) {
  console.log(key, value);
}

Лог консоли со всеми элементами словаря

Проверка наличия ключа

Для объектов можно использовать оператор in или hasOwnProperty:

let inDictionary = 'Mocha' in petDictionary; // true
let notInDictionary = 'a' in petDictionary; // false

let exists = petDictionary.hasOwnProperty('Mocha'); // true
let doesNotExist = petDictionary.hasOwnProperty('a'); // false

Для Map используйте has:

map.has('Mocha'); // true или false

Важно: оператор in проверяет всю цепочку прототипов, поэтому hasOwnProperty безопаснее для проверки собственных ключей объекта.

Удаление элемента из словаря

Присвоение null оставляет ключ в объекте, но очищает значение:

petDictionary['Apples'] = null;

Чтобы удалить ключ полностью, используйте delete:

delete petDictionary['Apples'];

Для Map используйте метод delete:

map.delete('Mocha');

Когда словарь не подходит и альтернативы

Контрпример: если вам нужен упорядоченный список записей или частые операции добавления/удаления в середине, лучше использовать массивы или связанные списки.

Альтернативы и когда их выбрать:

  • Map — если нужны ключи не только строковые, предсказуемое поведение без прототипных полей и быстрая итерация.
  • WeakMap — для хранения данных, привязанных к объектам, без препятствий для GC (ключи — только объекты).
  • Массивы — для упорядоченных наборов и индексированного доступа по числу.

Ментальные модели: представьте словарь как словарь в обычной жизни — вы ищете определение по слову (ключу), а не перебираете все слова.

Сниппет-читшит по операциям

// Создать
let obj = {};
let mp = new Map();

// Добавить
obj['k'] = 1;
mp.set('k', 1);

// Получить
let a = obj['k'];
let b = mp.get('k');

// Проверить
'k' in obj; obj.hasOwnProperty('k'); mp.has('k');

// Удалить
delete obj['k']; mp.delete('k');

// Обход
Object.keys(obj).forEach(k => console.log(k, obj[k]));
for (const [k, v] of mp) console.log(k, v);

Роль‑ориентированные чек‑листы

Для разработчика:

  • Выбрать Object или Map в зависимости от типов ключей.
  • Избегать ключей, совпадающих со стандартными именами прототипа (например, “toString”).
  • Использовать hasOwnProperty для проверки.

Для ревью кода:

  • Проверить, что ключи нормализованы (например, одинаковый регистр).
  • Проверить обработку отсутствующих значений и ошибок доступа.

Для инженера по производительности:

  • Замерить узкие места при большом объёме данных.
  • Рассмотреть Map или специализированные структуры при миллионах записей.

Мини‑методология выбора словаря

  1. Определите требования к ключам (строки или произвольные объекты). 2. Оцените объём и частоту операций. 3. Выберите Object, Map или специализированную структуру. 4. Напишите тесты на граничные случаи. 5. Прототипируйте и профилируйте.

Критерии приёмки

  • Добавление, чтение, проверка и удаление работают в соответствии с тестами.
  • Нет утечек памяти при использовании WeakMap там, где это необходимо.
  • Код покрыт тестами для граничных ключей (undefined, null, “”, числа).

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

Можно ли использовать объект как словарь для любых типов ключей?

Нет. У объектов ключи приводятся к строкам. Для произвольных типов (объекты, функции) используйте Map.

Когда стоит применять WeakMap?

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

Как выбрать между Object и Map по производительности?

Map обычно быстрее для большого количества операций вставки/удаления и хранения сложных ключей; тестируйте на своей нагрузке.

Итог

Словари — мощный и универсальный инструмент для организации данных по ключам. В JavaScript вы можете использовать объекты для простых случаев и Map/WeakMap для более точного контроля над типами ключей и временем жизни данных. Выбор зависит от требований к типам ключей, объёму данных и ожидаемых операций.

Важно: тестируйте поведение на реальных данных и помните о различиях между Object и Map.

Дополнительные материалы: короткий чек‑лист, сниппеты и советы по выбору структуры даны выше.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Анализ тональности на Python с VADER и Tkinter
Обработка текста

Анализ тональности на Python с VADER и Tkinter

Проверить прокси в Windows
Безопасность

Проверить прокси в Windows

Темы рабочего стола в Ubuntu 18.04 LTS
Linux

Темы рабочего стола в Ubuntu 18.04 LTS

Что делать, если Logitech G Pro Wireless не работает
Техподдержка

Что делать, если Logitech G Pro Wireless не работает

Dev Drive в Windows 11 — как начать
Разработка

Dev Drive в Windows 11 — как начать

Как сбросить и перезапустить OneDrive в Windows 10
Windows 10

Как сбросить и перезапустить OneDrive в Windows 10