What is the simplest way to get all keys from a JavaScript object?
Use Object.keys(object). It returns an array of all the object's own keys.
Click to reveal answer
beginner
How do you loop over all key-value pairs in an object using for...in?
Use <code>for (const key in object) { const value = object[key]; }</code>. It loops over all enumerable keys, including inherited ones.
Click to reveal answer
beginner
What method returns an array of an object's own enumerable property [key, value] pairs?
Use Object.entries(object). It returns an array of arrays, each with [key, value].
Click to reveal answer
intermediate
Why should you use Object.hasOwn(object, key) inside a for...in loop?
To check if the key belongs directly to the object and not inherited from its prototype chain.
Click to reveal answer
beginner
How can you iterate over an object’s keys and values using Object.entries and for...of?
Use <code>for (const [key, value] of Object.entries(object)) { /* use key and value */ }</code> for clean and direct access.
Click to reveal answer
Which method returns an array of an object's keys?
AObject.keys()
BObject.values()
CObject.entries()
Dfor...in loop
✗ Incorrect
Object.keys() returns an array of the object's own keys.
What does for...in loop iterate over?
AOnly own enumerable keys
BOnly values of the object
COnly symbols
DAll enumerable keys including inherited ones
✗ Incorrect
for...in loops over all enumerable keys, including inherited keys.
Which method gives you both keys and values as pairs in an array?
AObject.entries()
BObject.values()
CObject.keys()
Dfor...of loop
✗ Incorrect
Object.entries() returns an array of [key, value] pairs.
Why use Object.hasOwn(object, key) inside a for...in loop?
ATo convert object to array
BTo get values
CTo skip inherited keys
DTo get keys
✗ Incorrect
It ensures you only process keys that belong directly to the object.
Which loop works best with Object.entries() for clean key-value access?
Afor...in
Bfor...of
Cwhile
Ddo...while
✗ Incorrect
for...of loops over arrays like the one returned by Object.entries().
Explain how to iterate over all keys and values of a JavaScript object safely.
Think about methods that return keys or entries and how to avoid inherited keys.
You got /4 concepts.
Describe the difference between for...in and for...of when iterating over objects.
Consider what each loop expects to work with and what they return.
You got /4 concepts.
Practice
(1/5)
1. Which of the following is the correct way to loop over all keys in a JavaScript object obj?
easy
A. obj.forEach(key => console.log(key));
B. for (let i = 0; i < obj.length; i++) { console.log(obj[i]); }
C. for (let key in obj) { console.log(key); }
D. for (let key of obj) { console.log(key); }
Solution
Step 1: Understand looping over object keys
The for...in loop is designed to iterate over all enumerable keys in an object.
Step 2: Check each option's validity
for (let key in obj) { console.log(key); } uses for...in correctly. for (let i = 0; i < obj.length; i++) { console.log(obj[i]); } tries to use a numeric index on an object, which doesn't work. for (let key of obj) { console.log(key); } uses for...of which works on iterable objects like arrays, not plain objects. obj.forEach(key => console.log(key)); tries to use forEach on an object, which is invalid.
Final Answer:
for (let key in obj) { console.log(key); } -> Option C
Quick Check:
Use for...in to loop keys [OK]
Hint: Use for...in to loop keys in objects [OK]
Common Mistakes:
Using for...of on plain objects
Trying to use numeric indexes on objects
Using forEach directly on objects
2. Which syntax correctly accesses the value of each key inside a for...in loop over object data?
easy
A. for (let key in data) { console.log(data[key]); }
B. for (let key in data) { console.log(key.value); }
C. for (let key in data) { console.log(data.key); }
D. for (let key in data) { console.log(data->key); }
Solution
Step 1: Understand how to access object values by key
Inside a for...in loop, key is a string representing the property name. To get the value, use bracket notation: data[key].
Step 2: Evaluate each option
for (let key in data) { console.log(data.key); } uses dot notation with a variable, which looks for a property literally named 'key'. for (let key in data) { console.log(data[key]); } correctly uses bracket notation. for (let key in data) { console.log(key.value); } tries to access key.value, but key is a string, not an object. for (let key in data) { console.log(data->key); } uses invalid syntax.
Final Answer:
for (let key in data) { console.log(data[key]); } -> Option A
Quick Check:
Access values with data[key] inside for...in [OK]
Hint: Use bracket notation data[key] to get values [OK]
Common Mistakes:
Using dot notation with variable key
Treating key as an object
Using invalid syntax like arrows
3. What will be the output of the following code?
const obj = {a: 1, b: 2, c: 3};
let result = [];
for (let key in obj) {
result.push(key + obj[key]);
}
console.log(result);
medium
A. ['1', '2', '3']
B. ['1a', '2b', '3c']
C. ['a', 'b', 'c']
D. ['a1', 'b2', 'c3']
Solution
Step 1: Understand the loop and concatenation
The loop iterates over keys 'a', 'b', 'c'. For each key, it concatenates the key string with its value (number converted to string).
Step 2: Trace the result array
First iteration: 'a' + 1 = 'a1', second: 'b' + 2 = 'b2', third: 'c' + 3 = 'c3'. These are pushed into the array.
Hint: Concatenate key + value inside for...in loop [OK]
Common Mistakes:
Confusing order of concatenation
Expecting numeric addition instead of string concat
Using keys or values alone
4. Identify the error in this code snippet:
const user = {name: 'Alice', age: 25};
for (let key of user) {
console.log(key + ': ' + user[key]);
}
medium
A. Using for...of on a plain object causes a TypeError
B. Missing declaration of key variable
C. Incorrect string concatenation syntax
D. Accessing user[key] is invalid
Solution
Step 1: Check the loop type and object
for...of works on iterable objects like arrays or strings. Plain objects are not iterable, so this causes a TypeError.
Step 2: Confirm other parts are correct
The variable key is declared correctly. String concatenation and accessing user[key] are valid if the loop worked.
Final Answer:
Using for...of on a plain object causes a TypeError -> Option A
Quick Check:
for...of needs iterable, plain object is not [OK]
Hint: Use for...in or Object.keys() for objects, not for...of [OK]
Common Mistakes:
Using for...of on plain objects
Confusing variable declaration errors
Thinking user[key] is invalid
5. Given the object const scores = {alice: 10, bob: 0, carol: 5, dave: null};, which code snippet correctly creates a new object with only keys having truthy values?
hard
A. const filtered = {};
for (let key in scores) {
if (scores.key) filtered.key = scores.key;
}
B. const filtered = {};
for (let key in scores) {
if (scores[key]) filtered[key] = scores[key];
}
D. const filtered = Object.values(scores).filter(v => v);
Solution
Step 1: Understand filtering truthy values in an object
We want to keep keys where the value is truthy (not 0, null, undefined, false, '').
Step 2: Analyze each option
const filtered = {};
for (let key in scores) {
if (scores[key]) filtered[key] = scores[key];
} uses a for...in loop and checks scores[key] truthiness correctly, adding to filtered. const filtered = {};
for (let key in scores) {
if (scores.key) filtered.key = scores.key;
} incorrectly uses dot notation with variable key. const filtered = Object.keys(scores).filter(k => scores[k]).reduce((obj, k) => { obj[k] = scores[k]; return obj; }, {}); tries to use Object.keys() with filter and reduce, but the code is missing a return statement in the arrow function (syntax error). const filtered = Object.values(scores).filter(v => v); filters values only, losing keys and returning an array, not an object.
Final Answer:
const filtered = {};
for (let key in scores) {
if (scores[key]) filtered[key] = scores[key];
} -> Option B
Quick Check:
Use for...in with if (scores[key]) to filter [OK]
Hint: Use for...in and if (obj[key]) to filter truthy keys [OK]
Common Mistakes:
Using dot notation with variable keys
Confusing Object.values() with keys
Missing return in reduce arrow function
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.