为什么 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!');
    }
}

答案 1

IE9 之前的 IE 版本没有 Array 的 .indexOf() 函数,要定义确切的规范版本,请在尝试使用它之前运行以下命令:

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()的情况下添加.indexOf() ...基本上IE8或更低在这一点上。


答案 2

如果您使用的是jQuery,则可以改用$.inArray()。