理解jQuery的.eq()方法

3

jQuery的.eq()是:

eq: function( i ) {
    return i === -1 ?
        this.slice( i ) :
        this.slice( i, +i + 1 );
},

在“+i + 1”中,第一个“+”的作用是什么?

2
请注意进行i === -1检查的全部原因是因为只有eq(-1)这种情况无法被slice替换。例如,eq(2)相当于slice(2,3)eq(-2)相当于slice(-2,-1),但是eq(-1)无法变成slice(-1,0),因为那样不起作用... - Šime Vidas
如果.slice在JavaScript中区分-00(它们是不同的值),那就太好了。 - pimvdb
3个回答

5

这是将值转换为整数并确保执行整数加法而不是字符串连接。

例如,比较这两个:

var i = '1';
var result = i + 1; // result = '11';
var result2 = +i + 1; // result = 2;

回答为什么不能将其作为slice方法的第一个参数,是因为slice方法在内部执行转换。例如,以下内容将按预期工作:

var array = [1, 2, 3];
var result = array.slice('1', '2'); // result = [2];

2
@Randomblue,很可能是因为“slice”方法已经执行了这个转换。 - Darin Dimitrov
4
如果有人执行了eq('-1'),那么i === -1将会是false,因此三元运算符语句的最后一部分将被执行,这是不正确的。 - Randomblue
2
(尽管说实话,文档 明确说明整数是预期的参数类型,所以如果我编写该函数,我不会在第一次使用时加上 +i...) - Matt
@Randomblue,是的,看起来像是一个bug。 - Darin Dimitrov
3
幸运的是,jQuery确实定义了术语“整数”的含义:http://docs.jquery.com/Types#Integer :) - Šime Vidas
显示剩余3条评论

2
一元的 + 运算符将操作数强制转换为数字类型。其目的是修复类似于 '1', '2', '3' 等字符串值。

为什么不到处都使用 + 呢? - Randomblue
2
啊哈。看来 .eq('-1') 这个情况还没有解决。 - Randomblue
@Robusto:听起来不错。也许会有一点性能损失。 - Randomblue
@Robusto:还要考虑文件大小非常重要。+i是一个字符,而parseInt(i,10)则是14个字符。 - pimvdb
@Randomblue +1 === -1 修复了这个“问题”,不需要使用 parseInt - Šime Vidas
显示剩余3条评论

1

它确保i被视为数字而不是字符串。

如果3被视为字符串,那么3 + 1将会是31


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接