Получение списка названий свойств

Статический метод keys(<Объект>) из класса Object возвращает массив с названиями собственных перечислимых свойств объекта. Цепочка прототипов не просматривается:

let objA = Object.create(Object.prototype, {
   'a': { value: 10, enumerable: true },
   'c': { value: 22, enumerable: false }
});
let objB = Object.create(objA, {
   'b': { value: 55, enumerable: true }
});
console.log( Object.keys(objA) );  // [ 'a' ]
console.log( Object.keys(objB) );  // [ 'b' ]

В этом примере мы не получили свойство c, т. к. оно не является перечислимым. Если нужно дополнительно получить все собственные свойства, то следует воспользоваться статическим методом getOwnPropertyNames(<Объект>) из класса Object:

console.log( Object.getOwnPropertyNames(objA) );  // [ 'a', 'c' ]
console.log( Object.getOwnPropertyNames(objB) );  // [ 'b' ]

Статический метод values(<Объект>) из класса Object возвращает массив со значениями собственных перечислимых свойств объекта. Цепочка прототипов не просматривается:

console.log( Object.values(objA) );  // [ 10 ]
console.log( Object.values(objB) );  // [ 55 ]

С помощью статического метода entries(<Объект>) из класса Object можно получить массив, каждый элемент которого содержит массив, состоящий из названия и значения собственного перечислимого свойства:

console.log( Object.entries(objA) );  // [ [ 'a', 10 ] ]
console.log( Object.entries(objB) );  // [ [ 'b', 55 ] ]

Давайте напишем функцию, которая будет возвращать массив, состоящий из двух массивов. В первом массиве будут названия всех собственных свойств объекта, а во втором — названия всех свойств в его прототипе (без просмотра всей цепочки):

function getProps(obj) {
   if (typeof obj !== 'object' || obj === null)
      return [ [], [] ];
   let arrOwnProps = Object.getOwnPropertyNames(obj);
   arrOwnProps.sort();
   if (obj.__proto__ === null)
      return [ arrOwnProps, [] ]
   let arrProtoProps = Object.getOwnPropertyNames(obj.__proto__);
   arrProtoProps.sort();
   return [ arrOwnProps, arrProtoProps ]
}
let obj = { a: 0 };
console.log( getProps(obj) );

Результат:

[
  [ 'a' ],
  [
    '__defineGetter__',
    '__defineSetter__',
    '__lookupGetter__',
    '__lookupSetter__',
    '__proto__',
    'constructor',
    'hasOwnProperty',
    'isPrototypeOf',
    'propertyIsEnumerable',
    'toLocaleString',
    'toString',
    'valueOf'
  ]
]

Учебник по Node.js и JavaScript
Учебник по JavaScript (Node.js) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов