jQuery源码浅谈系列---$.inArray

 

之所以谈论一下这个api,是因为我以前在设计我自己的凤凰组件库的时候写过一个array的indexOf,然后我也写了一个JavaScript1.6新特性里面介绍的7个array扩展的api.所以回归到jQuery的源码再来看,可能就很简单了。

 

jQuery.inArray(value,array)

 

           确认第一个参数在数组中的位置,从0开始计数(如果没有就返回-1

 

 

  • value  ----------用于在数组中查找的项是否存在
  • array   ----------{Array}

源码展示:

 

/*@param elem 用于在数组中查找的项
@param array 待查找的数组
*/
inArray: function(elem,array){
        //判断浏览器是否支持javascript1.6新增的array原生的indexOf
         if(array.indexOf){
                   return array.indexOf(elem);
          }
         var i,
               len = array.length;
         //按照array的长度进行遍查找
         for(i = 0,i<len;i++){
               if(array[i] === elem ){
                     //如果array[i]的元素和elem相同
                     return i;
                }
         }
         //没有找到的话就返回-1
         return -1;
}
 

 

 

 

 

//简单测试一下
var arr = [0,1,2];
console.log($.inArray(0,arr));   //0
console.log($.inArray('a',arr));  //-1
 
总结一下:其实无论我们在编写自己的lib还是在一般的小项目里面,你如果看过hax的api设计讲座的话你会知道扩展Object.prototype的做法是不推荐的,或者尽量少用的。很多人在以前的项目里面自己在Array.prototype扩展了类似的indexOf,当然在IE8和以下的版本可能还是走你扩展的这个api,但是像ff等支持的高于JavaScript1.6版本以上的浏览器,它会去找原生的indexOf

而且个人觉得从代码优化角度来讲浏览器原生支持的似乎更快一点。如果你没有熟悉过JavaScript1.6等特性的新增情况也可以关注一下我后面推出的这个系列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值