Вопрос проверяет понимание работы цикла for...in и прототипного наследования в JavaScript, а также умение использовать метод hasOwnProperty для фильтрации собственных свойств объекта.
Цикл for...in в JavaScript перебирает все перечисляемые свойства объекта, включая те, которые были унаследованы через цепочку прототипов. Это может привести к неожиданным результатам, если объект имеет прототип с дополнительными свойствами.
Метод hasOwnProperty, унаследованный от Object.prototype, проверяет, является ли свойство собственным (не унаследованным). Используйте его внутри цикла для фильтрации:
const parent = { inheritedProp: 'value' };
const child = Object.create(parent);
child.ownProp = 'own';
for (let key in child) {
if (child.hasOwnProperty(key)) {
console.log(key); // только 'ownProp'
}
}Object.keys() — возвращает массив только собственных перечисляемых свойств, не затрагивая прототип.Object.getOwnPropertyNames() — возвращает все собственные свойства, включая неперечисляемые.Используйте hasOwnProperty внутри for...in для безопасной итерации по собственным свойствам объекта, особенно при работе с объектами, которые могут иметь неожиданные прототипы.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию