forEach выполняет те же циклы но за вас требуя от вас колбэка.
https://developer.mozilla.org/en-US/.../Array/forEach
С той разницей что недействительных членов вы не увидите:
var t = Object(this);
...
if (i in t)
fun.call(thisArg, t[i], i, t);
То есть
var arr=[];
arr[1] = 1;
arr[10] = 10;
console.log(arr.length); // 11
а forEach() выдаст ровно 2. Типо там map.