Get: примеры (JAVASCRIPT)

Функция get в JavaScript: полное руководство с примерами
Раздел: Объекты, Геттеры
get(key: Key): IDBRequest

Основы функции get в JavaScript

В JavaScript не существует единой глобальной функции с именем get. Это собирательный термин, который относится к нескольким различным методам с одинаковым названием, но разной функциональностью в разных контекстах.

Метод get() для объектов Map

Используется для получения значения по ключу из объекта Map. Принимает один аргумент - ключ, по которому осуществляется поиск. Возвращает значение, связанное с указанным ключом, или undefined, если ключ отсутствует в коллекции.

Геттеры свойств объектов

Специальные методы, которые вызываются при обращении к свойству объекта. Определяются через ключевое слово get в литерале объекта или с помощью Object.defineProperty(). Не принимают аргументов, возвращают вычисляемое значение.

Метод get() для DOM элементов

Методы типа getElementById(), getAttribute(), getComputedStyle() используются для работы с DOM. Имеют различную сигнатуру и возвращают разные значения в зависимости от конкретного метода.

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

Метод get() для Map

const map = new Map([
  ['name', 'Алексей'],
  ['age', 30],
  ['city', 'Москва']
]);

console.log(map.get('name'));
console.log(map.get('age'));
console.log(map.get('country'));
Алексей
30
undefined

Геттер свойства объекта

const user = {
  firstName: 'Иван',
  lastName: 'Петров',
  get fullName() {
    return `${this.firstName} ${this.lastName}`;
  }
};

console.log(user.fullName);
Иван Петров

Метод getAttribute()

<div id='test' data-info='пример'>Элемент</div>

const element = document.getElementById('test');
console.log(element.getAttribute('data-info'));
console.log(element.getAttribute('id'));
пример
test

Похожие функции в JavaScript

Object.defineProperty()

Позволяет определить геттер и сеттер для свойства с более тонким контролем, включая настройку enumerable, configurable и writable флагов.

Reflect.get()

Метод из API Reflect, который получает значение свойства объекта, поддерживая trap-ы для прокси объектов. Принимает три аргумента: целевой объект, ключ свойства и необязательный receiver.

Квадратные скобки для объектов и массивов

Прямое обращение через obj[key] или array[index] для получения значений. Работает быстрее, но не поддерживает вычисляемые свойства как геттеры.

Метод has() для Map

Проверяет наличие ключа в Map без получения значения. Возвращает boolean, что удобно для проверок существования.

Типичные ошибки

Путаница между методами разных объектов

const obj = {name: 'John'};
console.log(obj.get('name')); // Ошибка!
TypeError: obj.get is not a function

Использование геттера как функции

const obj = {
  get value() { return 42; }
};
console.log(obj.value()); // Ошибка!
TypeError: obj.value is not a function

Неучет регистра ключей в Map

const map = new Map([['NAME', 'Ivan']]);
console.log(map.get('name'));
undefined

Попытка использовать get для примитивов

const str = 'text';
console.log(str.get(0)); // Ошибка!
TypeError: str.get is not a function

Изменения в последних версиях

Метод get() для объектов Map был добавлен в ECMAScript 2015 (ES6) вместе со всей коллекцией Map. С тех пор его спецификация остается стабильной без существенных изменений.

В ES2022 появилась возможность использования приватных геттеров в классах через синтаксис #, что расширяет возможности инкапсуляции:

class User {
  #secret = 'data';
  get #privateGetter() {
    return this.#secret;
  }
  getPublic() {
    return this.#privateGetter;
  }
}

Также продолжается развитие методов get для различных API, например, navigator.getBattery() или performance.getEntriesByType().

Расширенные примеры использования

Цепочка get для вложенных Map

Пример javascript
const users = new Map([
  ['user1', new Map([
    ['profile', new Map([
      ['name', 'Мария'],
      ['email', 'maria@example.com']
    ])]
  ])]
]);

const email = users.get('user1')?.get('profile')?.get('email');
console.log(email);
console.log(users.get('user2')?.get('profile')?.get('email'));
maria@example.com
undefined

Геттер с вычисляемым значением и кэшированием

Пример javascript
const calculator = {
  values: [1, 2, 3, 4, 5],
  cachedSum: null,
  get sum() {
    if (this.cachedSum === null) {
      console.log('Вычисление суммы...');
      this.cachedSum = this.values.reduce((a, b) => a + b, 0);
    }
    return this.cachedSum;
  }
};

console.log(calculator.sum);
console.log(calculator.sum); // Второй раз вычисление не происходит
Вычисление суммы...
15
15

Использование get с Proxy для перехвата обращений

Пример javascript
const target = { message: 'Привет' };
const handler = {
  get(obj, prop) {
    return prop in obj ? obj[prop] : `Свойства ${prop} не существует`;
  }
};

const proxy = new Proxy(target, handler);
console.log(proxy.message);
console.log(proxy.undefinedProp);
Привет
Свойства undefinedProp не существует

Комбинирование Map.get() с другими методами

Пример javascript
const inventory = new Map([
  ['apple', { quantity: 10, price: 50 }],
  ['banana', { quantity: 5, price: 30 }],
  ['orange', { quantity: 0, price: 40 }]
]);

// Получение и обновление значения
const item = inventory.get('apple');
if (item) {
  item.quantity += 5;
}

// Фильтрация с использованием get
const availableItems = Array.from(inventory.keys())
  .filter(key => inventory.get(key).quantity > 0);

console.log(availableItems);
console.log(inventory.get('apple').quantity);
['apple', 'banana']
15

Геттер для вычисления свойства на лету

Пример javascript
const rectangle = {
  width: 10,
  height: 20,
  get area() {
    return this.width * this.height;
  },
  get perimeter() {
    return 2 * (this.width + this.height);
  },
  get diagonal() {
    return Math.sqrt(this.width ** 2 + this.height ** 2);
  }
};

rectangle.width = 15;
console.log(`Площадь: ${rectangle.area}`);
console.log(`Периметр: ${rectangle.perimeter}`);
console.log(`Диагональ: ${rectangle.diagonal.toFixed(2)}`);
Площадь: 300
Периметр: 70
Диагональ: 25.00

Аналоги в других языках программирования

Python: метод get() словаря

user = {'name': 'Anna', 'age': 25}
print(user.get('name'))
print(user.get('country', 'не указано'))
Anna
не указано

PHP: массив и метод get() в Laravel

$user = ['name' => 'Alex', 'age' => 30];
echo $user['name'] ?? 'default';
// В Laravel:
// $value = $request->get('key', 'default');
Alex

Java: метод get() HashMap

HashMap<String, String> map = new HashMap<>();
map.put('city', 'Moscow');
System.out.println(map.get('city'));
System.out.println(map.get('country'));
Moscow
null

C#: индексаторы и метод TryGetValue

Dictionary<string, string> dict = new Dictionary<string, string>();
dict['key'] = 'value';
Console.WriteLine(dict['key']);
// Безопасное получение:
dict.TryGetValue('key', out string result);
value

JS get function comments

En
Get Retrieves a record from the object store by its key