Вы просматриваете Array
, а не Object
. Для массивов лучше использовать:
for (var i=0; i<data.length; i=i+1){
/* ... */
}
В вашем цикле учитывается каждое свойство объекта Array. Это делает цикл for ... in
для массива менее предсказуемым. В вашем случае это выглядит так: sum
- это свойство (метод), добавленное к Array.prototype
в другом месте вашего кода.
Есть и другие способы просмотра массивов. См. Например этот SO-вопрос или этот
Ради интереса, более эзотерический способ зацикливания массива
Array.prototype.loop = function(fn){
var t = this;
return (function loop(fn,i){
return i ? loop(fn,i-1).concat(fn(t[i-1])) : [];
}(fn,t.length));
}
//e.g.
//add 1 to every value
var a = [1,2,3,4,5].loop(function(val){return val+1;});
alert(a); //=> [2,3,4,5,6]
//show every value in console
var b = [1,2,3,4,5].loop(function(val){return console.log(val), val;});