Я был удивлен, когда смог воспроизвести ошибку с минимальным количеством кода. Обратите внимание, что в этом минималистском примере Array.indexOf не вызывается. Также обратите внимание, что я пробовал несколько различных реализаций indexOf, включая несколько из stackoverflow.com.Что вызывает эту ошибку для for ... in после назначения Array.prototype.indexOf?
Ошибка при запуске в IE, отображаются три предупреждения: «indexOf», «0» и «1». В FF, как и следовало ожидать, появляются только два («0», «1»).
<html>
<body onLoad="test();">
<script language="javascript">
var testArray = ['Foo', 'Bar'];
if(!Array.prototype.indexOf) {
Array.prototype.indexOf = function (obj, fromIndex) {
if (fromIndex == null) {
fromIndex = 0;
} else if (fromIndex < 0) {
fromIndex = Math.max(0, this.length + fromIndex);
}
for (var i = fromIndex, j = this.length; i < j; i++) {
if (this[i] === obj)
return i;
}
return -1;
};
}
function test() {
var i;
for(i in testArray) {
alert(i);
}
}
</script>
</body>
</html>
Может ли это объяснить это? Я уже изменил свой код, чтобы использовать while
, поэтому я не под пистолетом, но на самом деле у меня все в тупике. Это напоминает мне ошибки переполнения памяти в c.
Благодарим вас; это именно то, что мне нужно. – overslacked
Вы действительно не должны использовать for..in на массивах вообще. См. Ссылку в моем ответе. – nickf
@Steve: Поскольку ничего не сломано, я бы не вызвал использование «hasOwnProperty()» исправления. ;-) – Tomalak