Существует множество решений о том, как включить реализацию indexOf в прототип Array, чтобы он работал в Internet Explorer, однако я наткнулся на проблему, которая, похоже, нигде не решена.
Используя довольно хорошо согласованную реализацию в MDC, я следующий код, который сейчас вызывает проблемы:
// indexOf support for IE (from MDC)
if (!Array.prototype.indexOf)
{
Array.prototype.indexOf = function(elt /*, from*/)
{
var len = this.length >>> 0;
var from = Number(arguments[1]) || 0;
from = (from < 0) ? Math.ceil(from) : Math.floor(from);
if (from < 0)
from += len;
for (; from < len; from++)
{
if (from in this && this[from] === elt)
return from;
}
return -1;
};
}
var i = [1,2,3,4];
for (j in i)
{
alert(i[j]);
}
Я ожидаю получить 4 предупреждения, каждое из которых содержит один из элементов массива. В Firefox и Chrome это именно то, что я вижу, однако в IE8 я получаю дополнительное предупреждение, содержащее код функции indexOf.
Что можно сделать, чтобы этого избежать?