Показать сообщение отдельно
  #2 (permalink)  
Старый 24.10.2014, 15:32
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,495

Скорее всего библиотека для нормальных браузеров использует 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){
    //...
})
__________________
29375, 35

Последний раз редактировалось Aetae, 24.10.2014 в 15:35.
Ответить с цитированием