Why is there no forEach method on Object in ECMAScript 5?

ecmascript-5, foreach, javascript

Solution

Well, it's pretty easy to rig up yourself. Why further pollute the prototypes?

Object.keys(obj).forEach(function(key) {
  var value = obj[key];
});

I think a big reason is that the powers that be want to avoid adding built in properties to `Object`. `Object`s are the building blocks of everything in Javascript, but are also the generic key/value store in the language. Adding new properties to `Object` would conflict with property names that your Javascript program might want to use. So adding built in names to `Object` is done with extreme caution.

Array is indexed by integers, so it doesn't have this issue.

This is also why we have `Object.keys(obj)` instead of simply `obj.keys`. Pollute the `Object` constructor as that it typically not a big deal, but leave instances alone.

Problem

ECMAScript 5's `array.forEach(callback[, thisArg])` is very convenient to iterate on an array and has many advantage over the syntax with a for: - It's more concise. - It doesn't create variables that we need only for the purpose of iterating. - It's creates a visibility scope for the local variables of the loop. - It boosts the performance. Is there a reason why there is no `object.forEach` to replace `for(var key in object)` ? Of course, we could use a JavaScript implementation, like _.each or $.each but those are performance killers.

Original source