zoukankan      html  css  js  c++  java
  • 修复浏览器不支持Array自带的indexOf方法的扩展

    JavaScript中Array的indexOf方法支持的浏览器有:IE9+、Firefox 2+、Safari 3+、Opera 9.5+和Chrome

    如果想要在不支持的浏览器中使用indexOf方法,可以使用如下的方式进行扩展:

    方法一:使用jQuery的$.inArray方法扩展Array方法(使用的jQuery版本是1.11.3版本)

    1 if(!Array.prototype.indexOf) {
    2   Array.prototype.indexOf = function(value, from) {
    3     return $.inArray(value, this, from);
    4   }
    5 }

    BUT,jQuery的$.inArray方法与Array自带的indexOf还是有差异的,使用如下代码进行测试:

    1 var arr = [1, 2, 3, 'cc', 'dd'];
    2 console.info(arr.indexOf(3));
    3 console.info(arr.indexOf(2,3));
    4 console.info(arr.indexOf(2,-7));
    5 console.info(arr.indexOf('dd',-2.6));
    6 console.info(arr.indexOf(2,-2.999999));
    7 console.info(arr.indexOf('cc',-3));
    $.inArray方法输出:2, -1, 1, -1, -1, 3
    Array自带方法输出:2, -1, 1, 4, -1, 3
    方法二:自己扩展Array的indexOf方法
     1 if (!Array.prototype.indexOf){
     2   Array.prototype.indexOf = function(value, from){
     3     var len = this.length >>> 0;
     4 
     5     // 索引必须为整数,忽略小数尾数
     6     var from = parseInt(from) || 0;
     7 
     8     // 当索引小于0时,加上一次数组长度
     9     from = from < 0 ? from + len : from;
    10 
    11     for (; from < len; from++){
    12       if (from in this && this[from] === value)
    13       return from;
    14     }
    15     return -1;
    16   };
    17 }

    经测试,在IE7+均能获得与Array自带的indexOf相同的功能

    注:此扩展未经严格意义上的多浏览器测试,用于生产环境时请慎重!

  • 相关阅读:
    Linux Xshell常用命令(项目部署)
    返回的数据转换成百分比分的方法
    百度分享插件
    vue请求中 post get传参方式是不同的哦
    Axios 中文使用
    关于iview ui的"Page分页"组件的使用
    Vue 实现前进刷新,后退不刷新的效果
    Vue框架Element UI教程-axios请求数据
    Spring学习总结(8)-接口多个实现类的动态调用
    Redis集群
  • 原文地址:https://www.cnblogs.com/TwinklingZ/p/5973757.html
Copyright © 2011-2022 走看看