Object.keys() и Reflect.ownKeys() оба используются для получения собственных свойств объекта, но они существенно отличаются тем, что возвращают и как упорядочивают результаты.
Возвращает только собственные перечисляемые строковые свойства — исключает:
Возвращает все собственные свойства независимо от перечисляемости или типа ключа, включая:
Object.keys()Reflect.ownKeys() следует строгому правилу упорядочивания:
Object.keys() следует тому же правилу упорядочивания, но только для перечисляемого строкового подмножества.
const obj = {
2: 'b',
1: 'a',
key: 'value'
};
Object.defineProperty(obj, 'hidden', { value: 'x', enumerable: false });
const sym = Symbol('s');
obj[sym] = 'symbol';
Object.keys(obj); // ['1', '2', 'key']
Reflect.ownKeys(obj); // ['1', '2', 'key', 'hidden', Symbol(s)]
Object.keys(), когда нужны только видимые, перечисляемые строковые свойства — это стандартный случай при работе с объектамиReflect.ownKeys(), когда нужна полная интроспекция — например, в прокси, паттернах рефлексии или метапрограммированииObject.keys() возвращает все собственные свойства объекта, включая как перечисляемые, так и неперечисляемые свойства со строковыми ключами.
Новый — ещё не проверен сообществом
Вы