The for..in loop is designed for iterating over an object's keys or property names, making it useful when accessing each property in an object. Although it can also be used to iterate over the indices of an array. Conversely, the for..of loop is intended to iterate directly over values in iterable collections like arrays, strings, Maps, or Sets.
1. for-in loop
The JavaScript for-in loops through the enumerable properties of an object. The loop will iterate over all enumerable properties of the object itself and those the object inherits from its constructor's prototype.
Syntax
for (variable in object)
statement
let person = {
firstName: "GeeksforGeeks",
lastName: "A Computer Science Portal for Geeks",
rank: 43
};
let userId = "";
let i;
for (i in person) {
userId += person[i];
console.log(userId);
}
Output
GeeksforGeeks GeeksforGeeksA Computer Science Portal for Geeks GeeksforGeeksA Computer Science Portal for Geeks43
2. for-of loop
This for-of statement lets you loop over the data structures that are iterable such as Arrays, Strings, Maps, Node Lists, and more. It calls a custom iteration hook with instructions to execute on the value of each property of the object.
Syntax
for (variable of iterable) {
statement
}
let text = [
"GeeksforGeeks",
" A Computer Science Portal for Geeks ",
"43"
];
let userId = "";
let i;
for (i of text) {
userId += i;
console.log(userId);
}
Output
GeeksforGeeks GeeksforGeeks A Computer Science Portal for Geeks GeeksforGeeks A Computer Science Portal for Geeks 43
Difference between for-in and for-of Statements
| Feature | for...in | for...of |
|---|---|---|
| Purpose | Iterates over enumerable properties of an object | Iterates over iterable objects like arrays, strings, maps, etc. |
| Type of Values | Returns the keys (property names) | Returns the values of the iterable |
| Use Case | Best for iterating over object properties | Best for iterating over array elements or any iterable |
| Common Usage | for (let key in obj) {...} | for (let value of iterable) {...} |
| Works with Arrays | Yes, but iterates over index keys (not recommended) | Yes, iterates directly over array values |
| Works with Objects | Yes, iterates over properties | No, unless object implements an iterable (e.g., Map) |
| Prototype Properties | Yes, includes inherited properties if not filtered | No, only iterates over actual iterable elements |
| Symbol Iterators | Does not use [Symbol.iterator] | Uses [Symbol.iterator], so it works with any iterable |
| Best Practice | Use with objects only | Use with arrays, strings, maps, sets, etc. |
Also, JavaScript supports different kinds of loops: