логотип PurpleSchool
Иконка входа
Вход
логотип PurpleSchool

Объект WeakMap в JavaScript

Автор

Дмитрий Нечаев

В JavaScript объект WeakMap представляет собой коллекцию из пар ключ-значение, где ключами могут быть только объекты, а значения могут быть любыми. Основное отличие WeakMap от Map заключается в том, что он позволяет собирать свои ключи сборщиком мусора, если на объекты-ключи больше нет других ссылок. Это делает WeakMap удобным инструментом для хранения приватных данных, доступ к которым можно ограничить только внутри определенного контекста. Давайте подробнее рассмотрим особенности работы с коллекцией WeakMap в JavaScript.

Создание WeakMap

Для создания нового объекта WeakMap используется конструктор WeakMap(). В отличие от Map, WeakMap не принимает массив или другие итерируемые объекты в качестве аргумента при создании.

// Создание пустого объекта WeakMap
const weakMap = new WeakMap();

Добавление и получение значений

Данные можно добавлять в WeakMap с помощью метода set(), указывая объект-ключ и значение. Затем можно получить значение, используя объект-ключ с помощью метода get(). Если объект-ключ уже не используется в программе, его и связанное с ним значение могут быть автоматически удалены сборщиком мусора.

// Создание объектов-ключей и значений
const obj1 = {};
const obj2 = {};
const value1 = 'значение1';
const value2 = 'значение2';

// Добавление значений в WeakMap
weakMap.set(obj1, value1);
weakMap.set(obj2, value2);

// Получение значения по объекту-ключу
console.log(weakMap.get(obj1)); // Выведет: значение1

Проверка наличия объекта-ключа

Для проверки наличия объекта-ключа в WeakMap используется метод has(), который возвращает логическое значение true, если объект-ключ существует в WeakMap, и false в противном случае.

console.log(weakMap.has(obj1)); // Выведет: true
console.log(weakMap.has({})); // Выведет: false, так как создан новый объект-ключ

Удаление объекта-ключа

Объект-ключ и его соответствующее значение можно удалить из WeakMap с помощью метода delete(). Этот метод возвращает логическое значение true, если объект-ключ успешно удален, и false, если объект-ключ не был найден в WeakMap.

console.log(weakMap.delete(obj1)); // Выведет: true
console.log(weakMap.delete({})); // Выведет: false, так как создан новый объект-ключ

Применение WeakMap

Основное применение WeakMap состоит в хранении приватных данных, доступ к которым можно ограничить только внутри определенного контекста. Например, WeakMap может использоваться для хранения слабых ссылок на приватные свойства объекта, чтобы они могли быть автоматически удалены, когда объект уничтожается.

const privateData = new WeakMap();

class MyClass {
  constructor() {
    privateData.set(this, { key: 'value' });
  }

  getPrivateData() {
    return privateData.get(this);
  }
}

const instance = new MyClass();
console.log(instance.getPrivateData()); // Выведет: { key: 'value' }

Преимущества использования WeakMap

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

Заключение

Коллекция WeakMap в JavaScript представляет собой удобный инструмент для хранения приватных данных и создания безопасных и эффективных программ. Она позволяет управлять доступом к данным и обеспечивает автоматическое удаление данных, когда они больше не нужны. Понимание и использование WeakMap поможет в создании более надежного и устойчивого кода при разработке JavaScript-приложений.

Карта развития разработчика

Получите полную карту развития разработчика по всем направлениям: frontend, backend, devops, mobile