Object.hasOwn(): собственное свойство без ловушки прототипа
Object.hasOwn проверяет наличие собственного свойства объекта, не включая унаследованные свойства.
Назначение
Object.hasOwn проверяет наличие собственного свойства объекта, не включая унаследованные свойства.
Как это работает
Результат не зависит от истинности сохранённого значения: null, false и undefined всё ещё могут быть значениями существующего свойства. Метод удобен и для объекта с переопределённым hasOwnProperty.
Пример
const config=Object.create({theme:'green'});
config.enabled=false;
console.assert(Object.hasOwn(config,'enabled'));
console.assert(!Object.hasOwn(config,'theme'));
console.assert('theme' in config);
Что должно получиться
Собственное поле найдено независимо от false. Унаследованная тема доступна через in, но не проходит проверку собственного свойства.
Граница применения и частая ошибка
Не проверяйте наличие настройки через if(object.key), если ноль или false являются допустимыми данными. Такая проверка смешивает отсутствие свойства и ложное значение.
Самостоятельная проверка
Создайте собственное поле со значением false и унаследованное поле со значением true. Сравните hasOwn с оператором in и обычной логической проверкой.
JavaScript в песочнице этого сайта не выполняется. Перенесите пример в отдельный учебный файл. Сначала проверьте исходный результат, затем измените входные данные; ошибка проверки означает, что результат отличается от ожидаемого.