🌐
MDN Web Docs
developer.mozilla.org › en-US › docs › Web › JavaScript › Reference › Statements › for...of
for...of - JavaScript | MDN - MDN Web Docs
The for...of statement executes a loop that operates on a sequence of values sourced from an iterable object. Iterable objects include instances of built-ins such as Array, String, TypedArray, Map, Set, NodeList (and other DOM collections), as well as the arguments object, generators produced ...
🌐
W3Schools
w3schools.com › js › js_loop_forof.asp
JavaScript For Of
The JavaScript for of statement loops through the values of an iterable object.
🌐
W3Schools
w3schools.com › js › js_loop_for.asp
JavaScript for Loop
The for statement creates a loop with 3 optional expressions: for (exp 1; exp 2; exp 3) { // code block to be executed } exp 1 is executed (one time) before the execution of the code block.
🌐
Mozilla
developer.mozilla.org › en-US › docs › Web › JavaScript › Guide › Loops_and_iteration
Loops and iteration - JavaScript - MDN Web Docs - Mozilla
A for loop repeats until a specified condition evaluates to false. The JavaScript for loop is similar to the Java and C for loop. ... The initializing expression initialization, if any, is executed. This expression usually initializes one or more loop counters, but the syntax allows an expression ...
🌐
GeeksforGeeks
geeksforgeeks.org › javascript › javascript-for-of-loop
JavaScript for...of Loop - GeeksforGeeks
August 5, 2025 - The JavaScript for...of loop is a modern, iteration statement introduced in ECMAScript 2015 (ES6).
🌐
DigitalOcean
digitalocean.com › community › tutorials › for-loops-for-of-loops-and-for-in-loops-in-javascript
JavaScript For Loops | DigitalOcean
August 26, 2021 - In this tutorial, we will learn ... elements of the JavaScript programming language. The for statement is a type of loop that will use up to three optional expressions to implement the repeated execution of a code block....
🌐
Programiz
programiz.com › javascript › for-of
JavaScript for... of Loop
The for..of loop in JavaScript allows you to iterate over iterable objects (arrays, sets, maps, strings etc).
🌐
MDN Web Docs
developer.mozilla.org › en-US › docs › Web › JavaScript › Reference › Statements › for
for - JavaScript | MDN - MDN Web Docs - Mozilla
The for statement creates a loop that consists of three optional expressions, enclosed in parentheses and separated by semicolons, followed by a statement (usually a block statement) to be executed in the loop.
🌐
freeCodeCamp
freecodecamp.org › news › javascript-loops-explained-for-loop-for
JavaScript Loops Explained: For Loop, While Loop, Do...while Loop, and More
February 15, 2020 - Loops are used in JavaScript to perform repeated tasks based on a condition. Conditions typically return true or false. A loop will continue running until the defined condition returns false. for Loop Syntax for (initialization; condition; ...
Find elsewhere
🌐
Mimo
mimo.org › glossary › javascript › for-loops
JavaScript For Loop: Efficient Iteration in JavaScript
The for of loop simplifies iterating through an arr, making code cleaner. JavaScript's array forEach() method is another form of loop that executes a function once per array element.
🌐
Exploring JS
exploringjs.com › es6 › ch_for-of.html
17. The for-of loop
for-of is a new loop in ES6 that replaces both for-in and forEach() and supports the new iteration protocol.
🌐
JavaScript Tutorial
javascripttutorial.net › home › javascript tutorial › javascript for…of loop
Introduction to JavaScript for...of Loop in ES6
October 6, 2023 - let scores = [80, 90, 70]; for (let score of scores) { score = score + 5; console.log(score); }Code language: JavaScript (javascript) ... In this example, the for...of iterates over every element of the scores array. It assigns the element of the scores array to the variable score in each iteration. If you don’t change the variable inside the loop, you should use the const keyword instead of the let keyword as follows:
🌐
Medium
medium.com › @abhishekprasadkashyap › the-new-for-of-loop-a-cleaner-way-to-iterate-in-javascript-3a41c9e3c2c4
The New for...of Loop: A Cleaner Way to Iterate in JavaScript | by Abhishek Prasad | Medium
February 9, 2025 - The for...of loop is used to iterate over the values of an iterable object, meaning it loops through each element directly without needing to track an index.
🌐
daily.dev
daily.dev › home › blog › get into tech › understanding javascript for of with index
Understanding Javascript for of with index
December 22, 2025 - When you use the for...of loop in JavaScript, it's great for going through items in a list or characters in a string one by one. But it doesn't automatically tell you where you are in the list or string (like, which number item you're on).
🌐
Programiz
programiz.com › javascript › for-loop
JavaScript for loop (with Examples)
In JavaScript, the for loop is used for iterating over a block of code a certain number of times, or to iterate over the elements of an array.
Top answer
1 of 12
1229

for…in iterates over property names, not values (and did so in an unspecified order up until ES2020*). You shouldn’t use it to iterate over arrays. For them, there’s ES6’s Array.prototype.entries, which now has support across current browser versions:

const myArray = [123, 15, 187, 32];

for (const [i, value] of myArray.entries()) {
  console.log(`${i}: ${value}`);
}

// 0: 123
// 1: 15
// 2: 187
// 3: 32
.as-console-wrapper { max-height: 100% !important; top: 0; border-top: 0 !important; }

Or, for extended compatibility with older browsers, there’s ES5’s forEach method that passes both the value and the index to the function you give it:

myArray.forEach(function (value, i) {
  console.log('%d: %s', i, value);
});

For iterables in general (where you would use a for…of loop rather than a for…in), iterator helpers are now in the language. You can use Iterator.prototype.forEach to iterate over an entire iterable with an index:

function* fibonacci() {
  let a = 0;
  let b = 1;

  for (;;) {
    yield a;
    [a, b] = [b, a + b];
  }
}

fibonacci().take(10).forEach((x, i) => {
  console.log(`F_${i} = ${x}`);
});
.as-console-wrapper { max-height: 100% !important; top: 0; border-top: 0 !important; }

More generally, Iterator#map can associate the values yielded by an iterator with their indexes:

fibonacci().map((x, i) => [i, x])

Not every iterable (or iterator!) is an Iterator, but you can convert every iterable to an Iterator with Iterator.from.

Without support for iterator helpers, you can use a generator function instead:

function* enumerate(iterable) {
  let i = 0;

  for (const x of iterable) {
    yield [i, x];
    i++;
  }
}

for (const [i, obj] of enumerate(myArray)) {
  console.log(i, obj);
}

If you actually did mean for…in – enumerating properties – you would need an additional counter. Object.keys(obj).forEach could work, but it only includes own properties; for…in includes enumerable properties anywhere on the prototype chain.

* The order is still unspecified under certain circumstances, including for typed arrays, proxies, and other exotic objects, as well as when properties are added or removed during iteration.

2 of 12
494

In ES6, it is good to use a for... of loop. You can get index in for... of like this

for (let [index, val] of array.entries()) {
  // your code goes here    
}

Note that Array.entries() returns an iterator, which is what allows it to work in the for-of loop; don't confuse this with Object.entries(), which returns an array of key-value pairs.

Top answer
1 of 2
21

A bit of backnowledge to explain your question:

In Javascript, Objects (among these are Arrays) store properties in key-value pairs. That means that each assigned value has a key (the property name) to access it. For example in

person[name] = 'Tom'

person is the Object, name the key and 'Tom' the corresponding value.

Arrays use indices (i.e. numbers) as keys:

array[5] = 10

Now, keep that in mind in the following explanation.

Let's start with the traditional for loop:

for(let i = 0; i < array.length; i++) {...}

This way of iterating over an array is the oldest of the bunch (as long as you are not using while-loops) You'll find a corresponding way of writing a for loop in pretty much any (imperative) programming language. You'll notice, it is very explicit in the way it works. E.g. you could change the break-condition i < array.length to something else (e.g. i < array.length-1 for skipping the last position), or the step i++ (e.g. to i+=2), or start at a different index (e.g. let i = 5). You can iterate backwards instead of forwards through the array, if you want. Pretty much anything you can do in another for loop, you can do in this kind as well, if you know how.

Inside the brackets {...} you can then use i as a key to access the arrays values

Now this is all very powerful and nice, but it gets cumbersome to write every time, especially if in most of the cases you just want to iterate over an array. But luckily we have for-in:

For-in will retrieve you all the keys you have set yourself. With an array, you can use that to achieve the same result as above using

for(let i in array) {...}

Note however, that for-in is not only gonna give you the number keys from an array. It is also gonna work on other keys you have set yourself on any object:

let object = {
    key1 : 'value',
    key2 : 'value'
}

for(let i in object) {
    console.log(i)
}

will log out 'key1' and 'key2' (yes, the keys as well are strings here).

For a bit more precise description of what keys exactly it will give you, have a look at the link below.

When would you use for-in? Whenever you want to call some code for each element of an array / (almost) each property of an object once. E.g. when you want to increment all values in an array by 1. When not to use for-in? Don't use it if you need more granular control over the order you traverse the array in, or you don't want to hit all elements of the array, but only every second/third.

For an excellent resource on for-in loops I recommend Mozilla Developer Network

So, what are for-of loops then?

For-of loops are syntactically (i.e. the way you write them) very similar to for-in loops:

for(let v of array) {...}

However, for one, they are only going to work on so-called iterable objects (arrays are iterable). Second, you only get the values. They are no longer going to give you any keys!

let array = ['a', 'b', 'c']
for(let v of array) {
    console.log(v)
}

logs 'a', 'b' and 'c'. You won't know anymore, what keys these values had!

So, when to use these? Every time you just need the values and don't care about the keys. E.g. if you just want to print the values. When not to use them? If you want to swap elements of an array, if you want to reverse order. You can't even increment the values by 1 and store them back into the array, because for that, you would need to know their corresponding key.

For more information on for-in loops as well as what iterable actually means, again, I recommend the MDN

2 of 2
2

The only key differences that you'll have to consider would be

  • Say you want to start your loop from a specific index, you can do that with your traditional for loop but not using for...of.

  • You can't access indices of your array elements natively. You'll need to go for a workaround to achieve this.

      //Cannot access indices
      for(const num of [11,22,33,44,55]){
         console.log(num);
      }
    
    
      //Workaround
      for(const [index, num] of [11,22,33,44,55].entries()){
         console.log(num, index);
      }
    
🌐
freeCodeCamp
freecodecamp.org › news › javascript-for-loops
JavaScript For Loop – Explained with Examples
November 7, 2024 - We're only going to look at JavaScript ... The for loop is an iterative statement which you use to check for certain conditions and then repeatedly execute a block of code as long as those conditions are met....
🌐
Medium
medium.com › @_DandyLyons › how-to-use-a-js-for-of-loop-with-an-index-a4675ed22351
How to use a JS for…of loop with an index | Medium
April 19, 2024 - JavaScript’s for...of loop is a powerful construct for iterating over elements in an iterable, such as arrays, strings, or other iterable objects. However, unlike the traditional C-style for loop…