首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

jQuery 源代码中的 indexOf.call 与 array.indexOf

首先,我们需要了解 jQuery 源代码中的 indexOf.callarray.indexOf 的区别。

在 jQuery 源代码中,indexOf.call 是一种方法,用于在数组或类数组对象中查找指定元素的索引。而 array.indexOf 是 JavaScript 原生的数组方法,用于在数组中查找指定元素的索引。

indexOf.call 的语法如下:

代码语言:javascript
复制
Array.prototype.indexOf.call(array, searchElement, fromIndex);

其中,array 是要搜索的数组或类数组对象,searchElement 是要查找的元素,fromIndex 是可选参数,表示从哪个索引开始查找。

array.indexOf 的语法如下:

代码语言:javascript
复制
array.indexOf(searchElement, fromIndex);

其中,array 是要搜索的数组,searchElement 是要查找的元素,fromIndex 是可选参数,表示从哪个索引开始查找。

在 jQuery 源代码中,indexOf.call 的使用场景通常是在处理类数组对象时,因为 array.indexOf 只能用于数组对象。

例如,在 jQuery 源代码中,可以看到以下代码:

代码语言:javascript
复制
var rclass = /[\t\r\n\f]/g;
var rnotwhite = (/\S+/g);
var rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
var rcheckableType = ( /^(?:checkbox|radio)$/i );
var rscriptType = ( /^$|\/(?:java|ecma)script/i );
var rleadingWhitespace = ( /^\s+/ );
var rnative = ( /^[^{]+\{\s*\[native \w/ );

var type = ( obj.constructor && obj.constructor.prototype.toString().match( rtypenamespace ) || [ "", "" ] )[ 1 ].toLowerCase();

var isFunction = function isFunction( obj ) {
  return jQuery.type(obj) === "function";
};

var isArrayLike = function isArrayLike( obj ) {
  var length = !!obj && "length" in obj && obj.length,
    type = jQuery.type( obj );

  if ( jQuery.isWindow( obj ) ) {
    return false;
  }

  return type === "array" || length === 0 ||
    typeof length === "number" && length > 0 && ( length - 1 ) in obj;
};

var Sizzle = ( function( window ) {
  var i,
    support,
    Expr,
    getText,
    isXML,
    tokenize,
    compile,
    select,
    outermostContext,
    sortInput,
    hasDuplicate,
    setDocument,
    document,
    docElem,
    documentIsHTML,
    rbuggyQSA,
    rbuggyMatches,
    matches,
    contains,
    expando = "sizzle" + 1 * new Date(),
    preferredDoc = window.document,
    dirruns = 0,
    done = 0,
    classCache = createCache(),
    tokenCache = createCache(),
    compilerCache = createCache(),
    sortOrder = function( a, b ) {
      if ( a === b ) {
        hasDuplicate = true;
      }
      return 0;
    },

在这段代码中,可以看到 indexOf.call 的使用,例如:

代码语言:javascript
复制
var type = ( obj.constructor && obj.constructor.prototype.toString().match( rtypenamespace ) || [ "", "" ] )[ 1 ].toLowerCase();

这段代码中,rtypenamespace 是一个正则表达式,用于匹配对象的类型。obj.constructor.prototype.toString() 返回对象的类型字符串,然后使用 match 方法将其与 rtypenamespace 进行匹配,得到一个数组。最后,使用 indexOf.call 方法获取匹配到的类型字符串,并将其转换为小写形式。

总之,indexOf.call 是一种在数组或类数组对象中查找指定元素的索引的方法,它在 jQuery 源代码中被广泛使用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • jQuery:详解jQuery事件(一)

    后来就想深入研究下jQuery内部机理,读过两遍jQuery源代码,但是自觉还差好远,跟好多大神(比如阮一峰)理解还是有很大差距。...一、jQuery事件   1、加载DOM:   执行时机:在常规JavaScript,通常使用window.onload方法,而在jQuery,使用是$(document).ready()方法...要解决这个问题,可以使用jQuery另一个关于页面加载方法——load()方法。load()方法会在元素onload事件绑定一个处理函数。...jQuery代码如下: $(window).load(function(){ //code... })   等价于JavaScript以下代码: window.onload = function...,jQuerybind方法是可以多次调用,并且可以简化为将上面的第二个bind去掉。

    1.7K20

    jQuery(function(){})(function(){})(jQuery)区别

    三、总结 jQuery(function(){ });用于存放操作DOM对象代码,执行其中代码时DOM对象已存在。...不可用于存放开发插件代码,因为jQuery对象没有得到传递,外部通过jQuery.method也调用不了其中方法(函数)。...(function(){ })(jQuery);用于存放开发插件代码,执行其中代码时DOM不一定存在,所以直接自动执行DOM操作代码请小心使用。 补充: (function($){...})...这就定义了一个匿名函数,参数为arg 而调用函数时,是在函数后面写上括号和实参,由于操作符优先级,函数本身也需要用括号,即: (function(arg){...})...(jQuery)则是一样,之所以只在形参使用$,是为了不与其他库冲突,所以实参用jQuery ,上述也可以这样写:var fn = function($){....}; fn(jQuery);

    865100

    jQuery:详解jQuery事件(二)

    上一篇讲到jQuery事件,深入学习了加载DOM和事件绑定相关知识,这篇主要深入讨论jQuery事件合成事件、事件冒泡和事件移除等内容。   ...接上篇jQuery:详解jQuery事件(一)   3、合成事件   jQuery有两个合成事件——hover()方法和toggle()方法,同ready()方法一样,这些都是jQuery自定义方法...*这里要注意一点是,jQueryhover()方法准确来说是替代jQUerybind("mouseenter")和bind("mouseleave"),而不是替代bind("mouseover"...停止事件冒泡:停止事件冒泡可以阻止事件其他对象事件处理函数被执行。在jQuery中提供了stopPropagation()方法来停止事件冒泡。...event.stopPropagation(); //停止事件冒泡 })   阻止默认行为:上面的stopPropagation()方法相似,jQuery也提供了preventDefault()

    2.2K30

    JQuery动画

    一、show()方法和hide()方法   这两种方法是jQuery动画最基本方法。...二、fadeIn()方法和fadeOut()方法 show()方法不同是,fadeIn()方法和fadeOut()方法只改变元素不透明度。    ...四、自定义动画方法animate() 在很多情况下,上面的三种方法无法满足用户各种需求,那么久需要对元素有更多控制,在jQuery可以使用animate()方法来自定义动画;其语法结构: animate...六、判断元素是否处于动画状态     在使用animate()方法时候,要避免动画积累而导致动画用户行为不一致,当用户快速在某个元素上执行animate()动画时,就会出现动画积累。...八、其他动画方法      除了上面的提到方法以外,jQuery还有4个专门用于交互动画方法。

    2.6K30

    jQueryDOM操作

    a 删除节点: remove:$(‘#test′).remove();该方法不会把匹配元素从 jQuery 对象删除,因而可以在将来再使用这些匹配元素。...但除了这个元素本身得以保留之外,remove() 不会保留元素 jQuery 数据。...不占位置 清空节点: empty:$(selector).empty() 从指定元素移出所有的内容,包括子节点和内容。占位置 复制节点:clone():只复制节点中内容,不包括任何行为。...xxx 节点互换需要先克隆节点 包裹节点:warp() 将指定节点用其他标记包裹起来,该方法对于需要在文档插入额外结构化标记非常有用。...将所有的元素进行单独包裹 wrap(“”) wrapAll() 将所有匹配元素用一个元素来包裹, wrapAll(“”) wrapInner()包裹指定元素子内容(包括文本节点) find()方法

    1.2K20

    jQueryDOM操作

    a 删除节点: remove:$(‘#test′).remove();该方法不会把匹配元素从 jQuery 对象删除,因而可以在将来再使用这些匹配元素。...但除了这个元素本身得以保留之外,remove() 不会保留元素 jQuery 数据。...不占位置 清空节点: empty:$(selector).empty() 从指定元素移出所有的内容,包括子节点和内容。占位置 复制节点:clone():只复制节点中内容,不包括任何行为。...xxx 节点互换需要先克隆节点 包裹节点:warp() 将指定节点用其他标记包裹起来,该方法对于需要在文档插入额外结构化标记非常有用。...将所有的元素进行单独包裹 wrap(“”) wrapAll() 将所有匹配元素用一个元素来包裹, wrapAll(“”) wrapInner()包裹指定元素子内容(包括文本节点) find()方法

    1.4K70

    jQuery简单动画

    本文作者:IMWeb 一大碗油茶 原文出处:IMWeb社区 未经同意,禁止转载 hide(time)将元素display变为none,可以设置时间,让其缓慢变化 show(time)将元素...(),slideUp() 只改变元素高度,如果一个元素display为none,调用down时元素将由上至下延伸显示,up则相反 toggle():切换元素可见状态,如果是可见,则切换为隐藏...speed:三种预定速度之一字符串("slow","normal", or "fast")或表示动画时长毫秒数值(如:1000) opacity:一个0至1之间表示透明度数字。...speed:三种预定速度之一字符串("slow","normal", or "fast")或表示动画时长毫秒数值(如:1000) easing:要使用擦除效果名称(需要插件支持).默认jQuery...gotoEnd:让当前正在执行动画立即完成,并且重设show和hide原始样式,调用回调函数等。

    1.6K50

    jQuery简单动画

    hide(time)将元素display变为none,可以设置时间,让其缓慢变化 show(time)将元素display变为block,可以设置时间,让其缓慢变化 fadeln(),fadeOut...() 只改变元素透明度,out会在指定一段时间内降低元素不透明度,直到完全消失,in则相反 slideDown(),slideUp() 只改变元素高度,如果一个元素display为none...fadeToggle通过透明度来切换元素可见性,淡入淡出效果 fadeTo(speed,opacity,[fn]):切换元素透明度 。...speed:三种预定速度之一字符串("slow","normal", or "fast")或表示动画时长毫秒数值(如:1000) opacity:一个0至1之间表示透明度数字。...speed:三种预定速度之一字符串("slow","normal", or "fast")或表示动画时长毫秒数值(如:1000) easing:要使用擦除效果名称(需要插件支持).默认jQuery

    1.1K20

    jQuery$是什么

    $在JS本身只是一个符号而异,在JS里什么也不是。...但在JS应用库JQUERY作者将之做为一个自定义函数名了,这个函数是获取指定网页元素函数,使用非常之频繁,所以好多新手不知道,还以为$是JS什么特殊语法。...如果放入控件后面,则达到了所想结果(控件加载完了,JS脚本也进行加载得到了想得到值) 其实如果是JS方法就无所谓放在那里,如果是全局对象js脚本就必须放在body里面。...或者是filter滤镜javascript联合使用产生图片淡入淡出效果等。这个是在页面加载时候加载 将JavaScript标识放置......或者是filter滤镜javascript联合使用产生图片淡入淡出效果 放入htmlhead,是页面加载前就运行,放入body,则加载后才运行javascript代码~~~ 所以head

    1.4K20
    领券