← Назад к вопросам

Как посмотреть весь список свойств?

2.3 Middle🔥 115 комментариев
#JavaScript Core

Комментарии (5)

🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Просмотр всех свойств объекта

В JavaScript существует несколько способов посмотреть все свойства объекта - от простого к продвинутому. Это важно при отладке, разработке API и понимании структуры данных.

Способ 1: console.log и console.table

Самый простой способ - вывести объект в консоль:

const user = {
  id: '123',
  name: 'John',
  email: 'john@example.com',
  age: 30,
  permissions: ['read', 'write'],
  metadata: {
    created: '2024-01-15',
    updated: '2024-02-10'
  }
};

// Просто вывести объект
console.log(user);
// Результат в консоли - развиваемое дерево

// Таблица - удобнее для массива объектов
const users = [
  { id: 1, name: 'John', age: 30 },
  { id: 2, name: 'Jane', age: 28 },
];
console.table(users);
// Красивая таблица с колонками

// Для одного объекта:
console.table(user);

Способ 2: Object.keys() - все свои свойства

const user = {
  id: '123',
  name: 'John',
  email: 'john@example.com',
  preferences: { theme: 'dark' }
};

// Только собственные свойства (не из прототипа)
const keys = Object.keys(user);
console.log(keys);
// ['id', 'name', 'email', 'preferences']

// Перебор всех свойств
Object.keys(user).forEach(key => {
  console.log(`${key}: ${user[key]}`);
});
// id: 123
// name: John
// email: john@example.com
// preferences: [object Object]

// Подсчёт свойств
console.log(Object.keys(user).length); // 4

Способ 3: Object.entries() - пары ключ-значение

const user = {
  id: '123',
  name: 'John',
  email: 'john@example.com'
};

// Получить все пары [ключ, значение]
const entries = Object.entries(user);
console.log(entries);
// [
//   ['id', '123'],
//   ['name', 'John'],
//   ['email', 'john@example.com']
// ]

// Отобразить всё в консоли
Object.entries(user).forEach(([key, value]) => {
  console.log(`${key}: ${value} (${typeof value})`);
});
// id: 123 (string)
// name: John (string)
// email: john@example.com (string)

Способ 4: Object.getOwnPropertyNames() - включая скрытые

const obj = {
  visible: 'yes',
  another: 42
};

// Определить скрытое свойство (не enumerable)
Object.defineProperty(obj, 'hidden', {
  value: 'secret',
  enumerable: false,
  writable: true
});

// Object.keys() не найдёт скрытое
console.log(Object.keys(obj));
// ['visible', 'another']

// Object.getOwnPropertyNames() найдёт всё
console.log(Object.getOwnPropertyNames(obj));
// ['visible', 'another', 'hidden']

// Получить все свойства с описанием
Object.getOwnPropertyNames(obj).forEach(prop => {
  const descriptor = Object.getOwnPropertyDescriptor(obj, prop);
  console.log(`${prop}:`, descriptor);
});
// {
//   value: 'yes',
//   writable: true,
//   enumerable: true,
//   configurable: true
// }

Способ 5: Перебор через цикл for...in (включая прототип)

class User {
  constructor(name) {
    this.name = name;
  }
  
  greet() {
    return `Hello, ${this.name}`;
  }
}

const user = new User('John');
user.email = 'john@example.com';

// for...in перебирает собственные + наследованные enumerable свойства
for (const key in user) {
  if (user.hasOwnProperty(key)) {
    // Только собственные свойства
    console.log(`Own: ${key} = ${user[key]}`);
  } else {
    // Наследованные
    console.log(`Inherited: ${key}`);
  }
}
// Own: name = John
// Own: email = john@example.com
// Inherited: greet

Способ 6: Reflect.ownKeys() - полный список

const obj = {
  public: 'visible'
};

// Добавить символ и скрытое свойство
const sym = Symbol('hidden');
obj[sym] = 'symbol value';

Object.defineProperty(obj, 'nonEnumerable', {
  value: 'hidden',
  enumerable: false
});

// Reflect.ownKeys() возвращает всё: keys + symbols + non-enumerable
console.log(Reflect.ownKeys(obj));
// ['public', 'nonEnumerable', Symbol(hidden)]

// Отобразить всё подробно
Reflect.ownKeys(obj).forEach(key => {
  const descriptor = Object.getOwnPropertyDescriptor(obj, key);
  console.log({
    key: String(key),
    value: obj[key],
    enumerable: descriptor?.enumerable,
    writable: descriptor?.writable
  });
});

Способ 7: Инспектировать прототип

const user = {
  name: 'John',
  email: 'john@example.com'
};

// Увидеть все свойства и методы (включая наследованные)
console.log(user); // Развернуть в браузере

// Проверить прототип
console.log(Object.getPrototypeOf(user));
// { constructor: ƒ Object(), __proto__: Object... }

// Вся цепочка прототипов
function getProtoChain(obj) {
  const chain = [];
  let current = obj;
  
  while (current) {
    chain.push(Object.getOwnPropertyNames(current));
    current = Object.getPrototypeOf(current);
    
    if (current === Object.prototype) break;
  }
  
  return chain;
}

getProtoChain(user);

Способ 8: JSON.stringify - видеть структуру

const user = {
  id: '123',
  name: 'John',
  emails: ['john@example.com', 'john.doe@example.com'],
  metadata: {
    created: '2024-01-15',
    premium: true,
    credits: null,
    bio: undefined // Не будет в JSON!
  }
};

// Красиво отформатировать структуру
const pretty = JSON.stringify(user, null, 2);
console.log(pretty);
// {
//   "id": "123",
//   "name": "John",
//   "emails": [
//     "john@example.com",
//     "john.doe@example.com"
//   ],
//   "metadata": {
//     "created": "2024-01-15",
//     "premium": true,
//     "credits": null
//   }
// }

// Отфильтровать свойства при stringify
JSON.stringify(user, (key, value) => {
  if (key === 'id') return undefined; // Исключить
  return value;
});

Практический пример: инспектор объекта

function inspectObject(obj, maxDepth = 2, currentDepth = 0) {
  if (currentDepth > maxDepth) return '[...deeper]';
  
  const indent = '  '.repeat(currentDepth);
  
  console.log(`${indent}{`);
  
  Object.entries(obj).forEach(([key, value]) => {
    const type = typeof value;
    
    if (value === null) {
      console.log(`${indent}  ${key}: null`);
    } else if (type === 'object' && !Array.isArray(value)) {
      console.log(`${indent}  ${key}: {`);
      inspectObject(value, maxDepth, currentDepth + 1);
      console.log(`${indent}  }`);
    } else if (Array.isArray(value)) {
      console.log(`${indent}  ${key}: [${value.length} items]`);
    } else if (type === 'string') {
      console.log(`${indent}  ${key}: "${value}"`);
    } else {
      console.log(`${indent}  ${key}: ${value} (${type})`);
    }
  });
  
  console.log(`${indent}}`);
}

// Использование
inspectObject(user, 3);

// АЛЬТЕРНАТИВА: использовать JSON.stringify с индентацией
console.log(JSON.stringify(user, null, 2));

В DevTools браузера

1. Открыть Console tab
2. Вписать имя объекта: user
3. Нажать Enter
4. Развернуть дерево свойств - видны все!

Клик на стрелку -> развернуть вложенные объекты
Ctrl+K или cmd+K -> очистить консоль

В IDE (VSCode)

// Наведись на переменную - видишь инлайн подсказку с типом
const user: User = fetchUser();
//    ^^^^
// Наведи cursor -> видишь все свойства User типа

// Используй Intellisense
user. // Ctrl+Space -> список всех свойств

Контрольный список способов

  • console.log(obj) - базовый вывод
  • console.table(obj) - таблица
  • Object.keys(obj) - свои свойства
  • Object.entries(obj) - пары ключ-значение
  • Object.getOwnPropertyNames(obj) - включая скрытые
  • Reflect.ownKeys(obj) - всё включая символы
  • JSON.stringify(obj, null, 2) - структура
  • DevTools -> открыть объект и развернуть

Каждый способ имеет свой use case - выбирай подходящий в зависимости от задачи.