Скорее всего библиотека для нормальных браузеров использует
Object.defineProperty с параметром
enumerable: false. IE8 не поддерживает этот метод, и потому библиотека для него просто пишет в прототип(это осуждается, но что поделаешь).
В принципе когда приходится работать в условиях чужих скриптов, что могут нагадить в прототип, обычно используют дополнительную проверку:
for(var key in object) if( object.hasOwnProperty(key) ) {
//...
}
Однако, если ты имеешь дело именно с массивами, а не объектами -
for in вообще употреблять для перебора не следует, как семантически так и в плане производительности. Используй обычные циклы, или(в современных браузерах/с помощью полифилов) методы массива:
var i = arr.length;
while(i--){
//...
}
for(var i = 0, len = arr.length; i < len; i++){
//...
}
arr.forEach(function(val){
//...
})