JavaScript中indexOf的相关知识

今天被jquery中的inArray方法折腾好久,基础不牢,特意查了一些相关知识记录在这里。我要先去洗澡了,等我有时间了我再完善这篇文章。

jQuery JavaScript Library v1.10.2的inArray源码:

inArray: function( elem, arr, i ) {
    var len;

    if ( arr ) {
      if ( core_indexOf ) {
        return core_indexOf.call( arr, elem, i );
      }

      len = arr.length;
      i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;

      for ( ; i < len; i++ ) {
        // Skip accessing in sparse arrays
        if ( i in arr && arr[ i ] === elem ) {
          return i;
        }
      }
    }

    return -1;
  },

jquery首先调用的也是es5的indexOf方法,然后再去遍历数组,你看到jquery使用的是===,这就是我的踩坑点,而es5默认使用的也是strict equality

我们知道zepto实现了和jquery类似的API,看看zepto v1.0的inArray源码:

$.inArray = function(elem, array, i){
  return emptyArray.indexOf.call(array, elem, i)
}

这个实现挺简单的,直接使用了es5的数组的indexOf方法。

参考链接

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf

jQuery源码分析之$.inArray()函数

作者: 曾小乱

喜欢写点有意思的东西

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据