Кратко
Object.keys() возвращает массив ключей. Object.values() — массив значений. Object.entries() — массив пар [ключ, значение]. Эти методы позволяют перебирать объекты так же удобно, как массивы.
Подробно
Объекты в JavaScript не имеют «индексов» как массивы. Но Object.keys/values/entries превращают их в массивы, которые можно перебирать.
Object.keys(obj) — массив ключей: const user = { name: 'Анна', age: 25 }; Object.keys(user); // ['name', 'age']
Object.values(obj) — массив значений: Object.values(user); // ['Анна', 25]
Object.entries(obj) — массив пар [ключ, значение]: Object.entries(user); // [['name', 'Анна'], ['age', 25]]
Эти методы возвращают массивы, поэтому с ними работают все методы массивов: Object.keys(user).forEach(key => console.log(key)); Object.entries(user).filter(([k, v]) => typeof v === 'string');
Применение:
- Перебор свойств объекта
- Фильтрация свойств
- Преобразование объекта в массив
- Проверка наличия свойства
Ментальная модель
Object.keys/values/entries — как ключ к шкафу: keys показывают названия ящиков, values — содержимое, entries — пары «название → содержимое».
Примеры
**Самый простой:**
const user = { name: 'Анна', age: 25, city: 'Москва' };
console.log(Object.keys(user)); // ['name', 'age', 'city']
console.log(Object.values(user)); // ['Анна', 25, 'Москва']keys — ключи, values — значения. Оба возвращают массивы.
**Простой:**
const product = { name: 'Phone', price: 500, inStock: true };
const entries = Object.entries(product);
// [['name', 'Phone'], ['price', 500], ['inStock', true]]
entries.forEach(([key, value]) => {
console.log(`${key}: ${value}`);
});Object.entries + деструктуризация — удобный способ перебрать пары ключ/значение.
**Реальный пример:**
const scores = { Анна: 95, Пётр: 87, Мария: 92 };
// Найти лучший результат:
const topScorer = Object.entries(scores)
.sort(([, a], [, b]) => b - a)[0];
console.log(`Лучший: ${topScorer[0]} (${topScorer[1]})`);
// Лучший: Анна (95)Object.entries превращает объект в массив, который можно сортировать и обрабатывать.
Частые ошибки
**Неправильно:** Путать Object.keys и Object.values
**Почему:** keys — ключи (строки), values — значения (любой тип).
**Правильно:** Object.keys → ['name', 'age']. Object.values → ['Анна', 25].
**Неправильно:** Думать, что Object.entries возвращает объект
**Почему:** Object.entries возвращает массив массивов: [['key', 'value']].
**Правильно:** Object.entries → [['key', 'value']]. Для обратного преобразования — Object.fromEntries.
**Неправильно:** Забывать, что порядок свойств может отличаться
**Почему:** В объектах порядок свойств не гарантирован (хотя на практике обычно строковые ключи идут в порядке объявления).
**Правильно:** Не полагайтесь на порядок свойств объекта. Используйте массивы для упорядоченных данных.
Важно запомнить
- Object.keys → массив ключей
- Object.values → массив значений
- Object.entries → массив [ключ, значение]
- Возвращают массивы — работают с map/filter/forEach
- Object.fromEntries — обратное преобразование
Связь
Назад: Вы знаете объекты (J11) и методы массивов (J14-16) — теперь вы можете их комбинировать.
Вперёд: Следующий урок (J18) — деструктуризация и spread/rest: мощный синтаксис для массивов и объектов.