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
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
Геттер с вычисляемым значением и кэшированием
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 для перехвата обращений
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() с другими методами
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
Геттер для вычисления свойства на лету
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