为什么indexOf不能在数组IE8上工作?
以下功能在Opera,Firefox和Chrome上运行良好。 但是,在IE8中, if ( allowed.indexOf(ext[1]) == -1)
部分失败。
有谁知道为什么? 有没有明显的错误?
function CheckMe() {
var allowed = new Array('docx','xls','xlsx', 'mp3', 'mp4', '3gp', 'sis', 'sisx', 'mp3', 'wav', 'mid', 'amr', 'jpg', 'gif', 'png', 'jpeg', 'txt', 'pdf', 'doc', 'rtf', 'thm', 'rar', 'zip', 'htm', 'html', 'css', 'swf', 'jar', 'nth', 'aac', 'cab', 'wgz');
var fileinput=document.getElementById('f');
var ext = fileinput.value.toLowerCase().split('.');
if ( allowed.indexOf(ext[1]) == -1)
{
document.getElementById('uploadsec').innerHTML = document.getElementById('uploadsec').innerHTML;
alert('This file type is not allowed!');
}
}
在IE9之前的IE版本没有用于Array的.indexOf()
函数来定义确切的spec版本,在尝试使用它之前运行它:
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;
};
}
这是来自MDN的版本,用于Firefox / SpiderMonkey。 在其他情况下,如IE,它会添加.indexOf()
在它缺少的情况下...基本上IE8或以下。
如果你使用jQuery,你可以使用$ .inArray()来代替。
如果您使用jQuery并希望继续使用indexOf而不必担心兼容性问题,则可以这样做:
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function(val) {
return jQuery.inArray(val, this);
};
}
当你想继续使用indexOf
但是在不可用时提供回退功能时,这会很有帮助。