Поиск и проверка в объектах
Поиск и проверка в объектах
Технический фундамент проверок объекта
Проверки в объектах бывают двух типов:
- проверка наличия ключа;
- получение структуры для обхода (
keys/values/entries).
const user = { id: 1, name: 'Ann' };
console.log('id' in user); // true
console.log(Object.hasOwn(user, 'name')); // true
console.log(Object.keys(user)); // ['id', 'name']
Ключевой момент: корректная проверка структуры всегда идет до бизнес-логики, а не после падения на undefined.
Проверка наличия ключа: in
Оператор in проверяет, есть ли ключ в объекте.
const user = { id: 1, name: 'Ann' };
console.log('name' in user); // true
console.log('email' in user); // false
hasOwnProperty
Метод hasOwnProperty проверяет только собственные свойства объекта.
console.log(user.hasOwnProperty('id')); // true
console.log(user.hasOwnProperty('toString')); // false
Смотри, что важно: in может учитывать свойства из прототипа, а hasOwnProperty — нет.
Еще один нюанс: вызывать obj.hasOwnProperty(...) не всегда безопасно (метод могут переопределить, или его может не быть, например у объекта с Object.create(null)).
Поэтому чаще используют:
console.log(Object.hasOwn(user, 'id')); // true
console.log(Object.prototype.hasOwnProperty.call(user, 'id')); // true
Получение ключей и значений
Object.keys(obj) возвращает массив ключей, Object.values(obj) — массив значений.
const settings = { theme: 'dark', lang: 'ru' };
console.log(Object.keys(settings)); // ['theme', 'lang']
console.log(Object.values(settings)); // ['dark', 'ru']
Пары ключ-значение: Object.entries
console.log(Object.entries(settings));
// [['theme', 'dark'], ['lang', 'ru']]
Это удобно, когда нужно пройтись циклом по объекту.
for (const [key, value] of Object.entries(settings)) {
console.log(`${key}: ${value}`);
}
Проверь себя: что вернет Object.keys({})?
Микро-сценарии
- Проверка обязательных полей ответа API.
function hasRequiredUserFields(data) {
return 'id' in data && 'name' in data;
}
- Рендер настроек в UI как список.
const rows = Object.entries(settings).map(([k, v]) => `${k}: ${v}`);
Типичные ошибки
- Проверять наличие через
if (obj.key), когда значение может быть0или''. - Путать
inиhasOwnProperty. - Забывать, что
Object.keysвозвращает массив строк. - Не учитывать пустой объект.
Краткий итог
inиhasOwnPropertyрешают задачу проверки ключей.Object.keys/values/entriesпомогают анализировать объект.- Проверка структуры данных обязательна перед использованием.
- Не путай «ключ отсутствует» и «значение falsy».
- Грамотные проверки уменьшают runtime-ошибки.