Andy_kun, нет, for in, если условно, равносильно рекурсивному вызову Object.keys вверх по цепочке наследования (Obect.keys(el) + Object.keys(Object.getProtiotypeOf(el)) + ...). Object.getOwnPropertyNames получает также как и keys только свойства самого объекта, но в отличение от keys он получает
все свойства, а не только перечислимые(enumerable).
{
const parent = {
parentProp: 'bar'
};
const child = Object.create(parent, {
nonEnumerableChildProp: {
enumerable: false,
value: 'buz'
}
});
child.childProp = 'foo';
function *keys (obj) {
for (const key in obj)
yield key;
}
console.log('child.parentProp', child.parentProp);
console.log('child.childProp', child.childProp);
console.log('child.nonEnumerableChildProp', child.nonEnumerableChildProp);
console.log('object.keys', Object.keys(child));
console.log('object.getOwnPropertyNames', Object.getOwnPropertyNames(child));
console.log('for in', [...keys(child)]);
}