`
zhangyaochun
  • 浏览: 2560502 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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等特性的新增情况也可以关注一下我后面推出的这个系列

3
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics