JavaScript Internals (521 Qs)•Part 8: Modern JavaScript APIs, WeakRef, Proxy & Performance (464 - 521)
What is the difference between Object.keys(), Object.values(), and Object.entries()?
These three methods extract different parts of an object's own enumerable properties:
javascript
const person = {
name: 'John',
age: 30,
city: 'New York'
};
// Object.keys() - returns array of property names
console.log(Object.keys(person));
// ['name', 'age', 'city']
// Object.values() - returns array of property values
console.log(Object.values(person));
// ['John', 30, 'New York']
// Object.entries() - returns array of [key, value] pairs
console.log(Object.entries(person));
// [['name', 'John'], ['age', 30], ['city', 'New York']]
Common use cases:
- Object.keys() for iteration:
javascript
Object.keys(person).forEach(key => {
console.log(`${key}: ${person[key]}`);
});
- Object.values() for value processing:
javascript
const sum = Object.values({ a: 1, b: 2, c: 3 })
.reduce((acc, val) => acc + val, 0); // 6
- Object.entries() for Map conversion:
javascript
const map = new Map(Object.entries(person));
// Or converting back from Map to Object
const obj = Object.fromEntries(map);
- Object.entries() for filtering:
javascript
const filtered = Object.fromEntries(
Object.entries(person).filter(([key, value]) =>
typeof value === 'string'
)
);
Note: All three methods only return own, enumerable properties, not inherited ones.