一尘不染

JavaScript为什么indexOf在数组IE8上不起作用?

javascript

以下功能在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!');
    }
}

阅读 331

收藏
2020-04-25

共1个答案

一尘不染

IE9之前的IE版本没有.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()在丢失的情况下添加……基本上是IE8或以下版本。

2020-04-25