Skip to main content
JavaScript & the browser·Module C6 · Lesson 1
TaskGiven const arr = [1,2,3] and const obj = {a: 1, b: 2, c: 3}: use for-of to log each value of arr; use Object.entries + for-of to log "<key>=<value>" for each obj entry.

for-of vs forEach vs for-in

100 XP7 min
Theory

Three loops, three jobs

for-of walks the values of any iterable. Works on Array, Map, Set, string, NodeList, generators — anything implementing the iteration protocol.

for (const x of [10, 20, 30]) console.log(x); // 10, 20, 30
for (const ch of "hi")        console.log(ch); // "h", "i"

forEach is a method on Array (and Map, Set) with a callback. It's older and less flexible — you can't break, continue, or await inside it without ceremony.

[10, 20, 30].forEach((x) => console.log(x));

for-in walks the enumerable property keys of an object. Use it on plain objects, NOT arrays — it also picks up inherited properties.

const obj = { a: 1, b: 2 };
for (const key in obj) console.log(key); // "a", "b"

The rule

  • Need values from a collection → for-of.
  • Need to await/break/early-exit → for-of.
  • Need object keys → Object.keys(obj) + for-of, or for-in if you trust the source.
  • Need a one-liner side effect on an array → forEach.

for-of is the default. forEach is rarely the right pick once you know for-of.

🔒

Sign up to start coding

Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial — card required, cancel anytime.

Sign up — free trial →

First 15 lessons in each track are free. No card needed for those.

PreviousNext lesson →

Get one Python or web tip a day — by email

Short, hand-written, no spam. Unsubscribe in one click.