Я был удивлен, когда смог воспроизвести ошибку с минимальным количеством кода. Обратите внимание, что в этом минималистском примере Array.indexOf не вызывается. Также обратите внимание, что я пробовал несколько различных реализаций indexOf, включая несколько из stackoverflow.com.
Ошибка в том, что когда for... in выполняется в 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.