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相同的功能

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

  • 相关阅读:
    30行左右代码实现一个类似httprunner的接口框架
    Python中一些高效的数据操作
    使用jsonpath解析多层嵌套的json响应信息
    操作系统的启动流程
    I/O延迟
    存储器
    多线程和多核芯片
    CPU详解(内核态和用户态)
    操作系统
    计算机组成
  • 原文地址:https://www.cnblogs.com/TwinklingZ/p/5973757.html
Copyright © 2011-2022 走看看