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.