首页 > web前端 > js教程 > 为什么 Array.indexOf() 在 IE8 中失败,如何修复?

为什么 Array.indexOf() 在 IE8 中失败,如何修复?

DDD
发布: 2024-11-21 00:36:17
原创
899 人浏览过

Why Does `Array.indexOf()` Fail in IE8, and How Can It Be Fixed?

Array.indexOf() 函数在 IE8 中失败

indexOf() 函数,用于检查数组中元素的索引,在 9 之前的 Internet Explorer (IE) 版本中提出了挑战。具体来说,在 IE8 中,此函数无法按预期工作,让开发人员陷入困境。

要追踪根本原因,请考虑以下函数,其中在 Opera、Firefox 和 Chrome 等浏览器中有效:

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) {...
登录后复制

函数尝试执行 if (allowed.indexOf(ext[1]) == -1) 条件语句时会发生错误。在 IE8 中,数组不支持 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;
  };
}
登录后复制

此修复添加了 indexOf () 方法到数组原型(如果它不存在),特别是针对 IE8 或更低版本。通过合并此修复,CheckMe() 函数将按预期执行,解决 IE8 中的问题。

以上是为什么 Array.indexOf() 在 IE8 中失败,如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板