`

javascript中ie8/ie9不支持Array.indexOf解决办法

 
阅读更多

场景:
js中判断一个string是否在一个js的数组中。
方法:

 代码如下 复制代码

if (['a', 'b', 'c'].indexOf(str) >= 0) {
    //do something
}

判断选择的文件的扩展名是否在指定的数组中:

 代码如下 复制代码

var position = selectedFilePath.lastIndexOf(".");
        if(position<=0){
         alert("不允许上传这种扩展名的文件!");
         return;
        } else{
         var ext = selectedFilePath.substr(position);
         ext = ext.toLowerCase();
         var extArr = [".jpg",".png",".gif", ".jpeg"];
         if(extArr.indexOf(ext) == -1){
          alert("不允许上传这种扩展名的文件!");
          return;
         }
        }

问题:ie9以下的版本不支持 [].indexOf()
解决方案

针对ie8及以下版本,自己创建indexOf函数。
ie8.js :

 代码如下 复制代码

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;
  };
}

然后在相关页面中引入ie8.js

 代码如下 复制代码

<!--[if lt IE 9]>
  <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
  <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
  <script src="./assets/js/ie8.js"></script>
    <![endif]-->

分享到:
评论

相关推荐

    为JS扩展Array.prototype.indexOf引发的问题及解决办法

    在Firefox 3.5(支持JavaScript 1.8)中,由于内置了`Array.prototype.indexOf`,所以不会输出这个自定义方法,而在只支持JavaScript 1.3的IE8中,`indexOf`被认为是用户定义的属性。 为了解决这个问题,可以利用...

    解决遍历时Array.indexOf产生的性能问题

    在讨论如何解决遍历时Array.indexOf产生性能问题之前,先需要了解Array.indexOf方法的工作原理及其在JavaScript中的重要性。Array.indexOf是JavaScript数组对象的一个方法,用于确定某个特定元素在数组中的位置,...

    array.js:使ie8等浏览兼容array最新方法

    "array.js:使ie8等浏览兼容array最新方法"这个标题暗示了我们正在寻找一种方法,让老版本的IE浏览器能够支持那些在ES5中引入的新颖的Array函数。这些方法包括`forEach`, `map`, `filter`, `reduce`, `every`, `some`...

    终于解决了IE8不支持数组的indexOf方法

    在JavaScript的世界里,`Array.prototype.indexOf` 是一个非常基础且常用的方法,它允许开发者查找数组中是否存在特定元素,并返回该元素的索引位置。然而,IE8及更早版本的Internet Explorer浏览器并不原生支持这个...

    JavaScript从数组的indexOf()深化之Object的Property机制_.docx

    `indexOf()`方法是在ECMAScript 5中引入的,因此,在较老的浏览器如IE8及以下版本中可能不支持此方法。为了确保代码的兼容性,可以通过扩展数组原型的方式手动实现`indexOf()`方法。 **示例**: ```javascript if ...

    JavaScript 不支持 indexof 该如何解决

    为了解决IE8不支持indexOf的问题,可以通过编写一个兼容性的polyfill脚本来模拟indexOf()方法的功能。该polyfill通过扩展Array.prototype来添加indexOf方法,这样即使在不支持该方法的浏览器中,也可以调用indexOf()...

    Javascript在IE和FireFox中的兼容处理

    - IE6-8没有提供`Array.prototype.indexOf`,可以自定义函数实现。 2. **自定义属性获取** - IE允许在DOM元素上直接添加非标准属性,如`element.selfAttr`,而Firefox则需要通过`element.getAttribute('selfAttr'...

    基于bootstrap-datetimepicker.js不支持IE8的快速解决方法

    首先,我们需要理解IE8不支持的一些现代JavaScript特性,例如`Array.prototype.indexOf()`方法。这个方法用于在一个数组中查找指定元素的索引,如果找不到则返回-1。在IE8及更早版本中,这个方法是缺失的,因此我们...

    javascript权威指南(第六版)

    13.3 Execution of JavaScript Programs 317 13.4 Compatibility and Interoperability 325 13.5 Accessibility 332 13.6 Security 332 13.7 Client-Side Frameworks 338 14. The Window Object . . . . . . . . . ....

    es5-shim.js

    10. **其他改进**:还包括`Array.prototype.indexOf` 和 `Array.prototype.lastIndexOf`,`String.prototype.trim` 等字符串和数组操作的改进。 **使用es5-shim.js** 要使用`es5-shim.js`,只需在旧版浏览器中引入...

    对象不支持indexOf属性或方法的解决方法(必看)

    然而,这个方法在一些较旧的浏览器版本,尤其是IE8及以下版本中并不被支持,这就会导致"对象不支持indexOf属性或方法"的错误。为了解决这个问题,我们可以采用一些兼容性处理策略,例如使用jQuery库中的`$.inArray`...

    AOM中IE、Firefox兼容Enter代替Tab的Javascript

    var currentFocusIndex = Array.prototype.indexOf.call(document.querySelectorAll(focusableElements), document.activeElement); var nextFocusableElement = document.querySelectorAll(focusableElements)[...

    array-foreach:Array.prototype.forEach polyfill

    在一些老版本的浏览器中,如IE8及更早版本,不支持这个特性,因此开发者需要使用polyfill(填充物)来实现这个功能。`Array.prototype.forEach` 的polyfill就是为了解决兼容性问题,使得在不支持该方法的环境中也能...

    javascript小技巧&nbsp;&nbsp;超强推荐第3 5页.docx

    9. **JavaScript中的 `alert()` 函数使用技巧详解:** 虽然在现代前端开发中使用较少,但在一些简单交互场景中仍然有用。 10. **41个Web开发者必须收藏的JavaScript实用技巧:** 涵盖了从基础语法到高级应用的各种...

    JavaScript中关于indexOf的使用方法与问题小结

    在JavaScript 1.6版本之前,`indexOf`方法并未在所有浏览器中得到支持,尤其是IE浏览器在IE7和IE8中仅实现了到JavaScript 1.3版本,因此在这些旧版本的IE中尝试使用`indexOf`会抛出错误。相反,Chrome和Firefox等较...

    Glype完全汉化&&移动版自动跳转适配.zip

    i++){ if (browser.indexOf(mobileAgent[i])!=-1){ isMobile = true; //alert(mobileAgent[i]); location.href = '手机网址'; break; } } &lt;/script&gt; 修改手机网址为自己的站点手机站目录,如...

Global site tag (gtag.js) - Google Analytics