Javascript和Jquery中的array.eq()与array[]的比较

Javascript和Jquery中的array.eq()与array[]的比较,javascript,jquery,arrays,slideshow,Javascript,Jquery,Arrays,Slideshow,访问数组时,何时使用.eq()函数合适 例如,我有 slides.eq(slidesLength-1).css("z-index", (slidesLength-1)); for(i=0; i<slidesLength-1; i++) { $(slides[i]).css("left", "-100%"); } 后来我 slides.eq(slidesLength-1).css("z-index", (slidesLength-1)); for(i=0; i<slide

访问数组时,何时使用.eq()函数合适

例如,我有

slides.eq(slidesLength-1).css("z-index", (slidesLength-1));
for(i=0; i<slidesLength-1; i++) {
    $(slides[i]).css("left", "-100%");
}
后来我

slides.eq(slidesLength-1).css("z-index", (slidesLength-1));
for(i=0; i<slidesLength-1; i++) {
    $(slides[i]).css("left", "-100%");
}
(i=0;i
幻灯片
不是数组。它是jQuery对象。该方法将指定索引处的元素作为jQuery对象返回给您

虽然jQuery对象可能不是数组,但它们可以通过具有
length
属性以及与索引对应的属性来假装是数组(因为它们不是数组,所以不能对它们调用
.pop()
.forEach()
等方法)

执行
幻灯片[i]
时,实际上是获得DOM元素,而不是jQuery对象。
$()
函数将DOM元素转换为jQuery对象

因此,当您执行
slides.eq(1)
时,jQuery在内部执行
$(slides[i])

p.S.对象,如jQuery对象,假装为数组,称为“类似数组的对象”。如果您
console.log(slides)
,它可能看起来像数组。这只是您的控制台试图为您提供方便。(有关更多信息,请参阅此问题:)

.eq()
是一种jQuery方法,它返回jQuery对象,而通过索引访问返回普通DOM元素。如果要对返回的选择使用jQuery方法(
css()
),则应使用
eq()


之所以
$(slides[i])
有效,是因为您正在通过将普通元素传递给
$()
构造函数来构造jQuery对象。

您的
slides
变量不是
数组,而是jQuery对象

返回jQuery对象,如果
索引
超出范围,则最终为空,并且从末尾开始计算负的
索引

返回DOM元素,如果
索引
超出范围,则返回
未定义的
,并且从末尾开始计算负的
索引

[]
返回DOM元素,如果
索引超出范围,则抛出错误

此外,jQuery方法允许您单独与一组元素交互。因此,如果您这样做:

slides.css("left", "-100%");
它应用于jQuery对象中包含的每个匹配元素,不需要对它们进行循环

此外,循环匹配元素的首选方法是使用以下方法:


另外,使用
$
符号作为jQuery变量的前缀是一种既定惯例;它可以让您轻松区分DOM元素和jQuery对象。但这只是品味的问题。

谢谢您的解释。很明显,我需要做进一步的阅读。谢谢。我现在理解了区别。我一定会阅读更多关于细微差别。回答得好……我忘记了
.get()
方法!注意:如果在jQuery对象上调用
.get()
而没有参数,则会返回一个[real]数组(DOM元素或jQuery对象中的任何元素)。感谢您的全面响应。我一定会将您的答案集成到我的代码中。好的,现在我使用for循环,您建议使用.each()函数。除了jQuery对象中包含的一个元素外,.each()函数是否可以针对所有元素?