Как проверить, есть ли свойство в объекте
Короткий ответ
Object.hasOwn() проверяет, есть ли у объекта собственное свойство:
const user = { name: 'Anna' };
console.log(Object.hasOwn(user, 'name'));
console.log(Object.hasOwn(user, 'age'));Результат:
true
falseОператор in
Оператор in учитывает и унаследованные свойства, например встроенные методы:
const user = { name: 'Anna' };
console.log('name' in user);
console.log('toString' in user);Результат:
true
trueПочему не сравнение с undefined
Свойство может существовать и при этом хранить undefined — тогда сравнение даст неверный ответ:
const settings = { theme: undefined };
console.log(settings.theme !== undefined);
console.log(Object.hasOwn(settings, 'theme'));Результат:
false
trueЧастая ошибка
Проверка вида if (user.age) считает отсутствующим свойство со значением 0, false или пустой строкой:
const user = { name: 'Anna', age: 0 };
console.log(user.age ? 'has age' : 'no age');
console.log(Object.hasOwn(user, 'age') ? 'has age' : 'no age');Результат:
no age
has ageФункции из этого ответа
- Object.hasOwn — Проверяет, есть ли у объекта собственное свойство.
- Object.keys — Возвращает массив имён свойств объекта.