Tân
Tân

Reputation: 1

Why isn't forEach a loop in javascript?

Compiler threw me error when I tried:

['a', 'b', 'c'].forEach(function (x) {
   if (x == 'b') {
      break //error message: Can't have 'break' outside of loop
   }
})

Valid syntax:

var x = ['a', 'b', 'c'];
for (var i = 0; i < x.length; i++) {
    if (x[i] == 'b') {
        break
    }
}

So, why?

Upvotes: 4

Views: 83

Answers (4)

Yaron Schwimmer
Yaron Schwimmer

Reputation: 5357

The explanation for your question was well given by @Wim Hollebrandse.

If you want to break the loop, try using some instead of forEach:

['a', 'b', 'c'].some(function (x) {
  if (x == 'b') {
    return true; 
  }
});

Upvotes: 1

Wim
Wim

Reputation: 12082

The forEach may lead you to believe that you are inside the context of a for loop, but this is not the case.

It is simply a method that is executed for each of the elements in the array. So inside the function, you only have control over the current iteration but can in no way cancel or break out of the method subscription for the other array elements.

Upvotes: 7

Koshinae
Koshinae

Reputation: 2320

Because it's a method in the Array prototype.

To break out, throw an exception.

Upvotes: 0

Ludovic Feltz
Ludovic Feltz

Reputation: 11916

That's because you are in a function. The break keyword is not available here (outside of a loop)

Upvotes: 0

Related Questions