For...of loop in JavaScript

What is for...of?

for...of is a loop that iterates over values of an iterable object.
An iterable is something that can be looped over, like:

  • Arrays

  • Strings

  • Maps

  • Sets

  • Typed Arrays

  • Generator objects

  • arguments object

Think of it as: “Give me each value in this collection, one at a time.”


Syntax

for (const value of iterable) {
  // use the value
}
  • iterable → something loopable (like an array or string)

  • value → each value from that iterable


Basic Example with Array

const fruits = ["apple", "banana", "cherry"];

for (const fruit of fruits) {
  console.log(fruit);
}
// apple
// banana
// cherry

Here:

  • for...of directly gives values (not indexes)

  • Cleaner than a for loop if you don’t need the index.


Example with String

const word = "Hello";

for (const char of word) {
  console.log(char);
}
// H
// e
// l
// l
// o

It loops through each character.


Example with Map

const map = new Map([
  ["name", "Gagan"],
  ["role", "Developer"]
]);

for (const [key, value] of map) {
  console.log(key, "=>", value);
}
// name => Gagan
// role => Developer

Example with Set

const set = new Set([1, 2, 3, 3]);

for (const value of set) {
  console.log(value);
}
// 1
// 2
// 3   (no duplicates)

Comparing for...in vs for...of

Feature for...in for...of
Loops over Keys (property names) Values
Works on Objects (and arrays, but not ideal) Iterables (arrays, strings, maps…)
Use case Loop through object properties Loop through iterable values
Includes inherited properties? Yes No

Why use for...of?

✅ Simpler syntax for values
✅ Works naturally with iterables
✅ Avoids index-to-value conversion in arrays
✅ Cleaner than forEach if you want to use break or continue


When NOT to use for...of

  • On plain objects — they are not iterable by default:

const obj = { a: 1, b: 2 };
for (const value of obj) { // ❌ TypeError
  console.log(value);
}

Instead, convert to an array first:

for (const value of Object.values(obj)) {
  console.log(value);
}

Extra Tip — Getting index in for...of

for...of doesn’t give indexes directly, but you can use entries():

const colors = ["red", "green", "blue"];

for (const [index, color] of colors.entries()) {
  console.log(index, color);
}
// 0 red
// 1 green
// 2 blue

Cheat Sheet

  • for...in → keys/properties

  • for...of → values of iterables

  • Arrays, strings, maps, sets → ✅ works with for...of

  • Plain objects → ❌ not iterable without conversion


No comments:

Post a Comment

What is slice() in JavaScript

What is slice() ? slice() is a method used to copy a portion of an array or string without changing the original . Think of it like cut...