В javascript всё наследуется от объекта. Потому с массивом можно делать всё тоже что и с объектом(втч использовать перебор for in), а вот с объектом (напрямую) методы массива(forEach) не применить.
Просто for in не рекомендуется использовать на случай стороннего расширения прототипа:
<script>
Object.prototype.ext = 'нежданчик'
var pets = {cat: 'Котэ'}
for (let key in pets) {
document.write(`Свойство: ${key}. Значение свойства: ${pets[key]}<br>`);
};
</script>
При любом использовании for in рекомендуется использовать проверку на собственные свойства(что при Object.keys не нужно):
<script>
Object.prototype.ext = 'нежданчик'
var pets = {cat: 'Котэ'}
for (let key in pets) if(pets.hasOwnProperty(key)) {
document.write(`Свойство: ${key}. Значение свойства: ${pets[key]}<br>`);
};
</script>