Javascript 理解jQuery';s.eq()

Javascript 理解jQuery';s.eq(),javascript,jquery,Javascript,Jquery,jQuery的.eq()是: eq: function( i ) { return i === -1 ? this.slice( i ) : this.slice( i, +i + 1 ); }, +i+1中第一个+的要点是什么?将值转换为整数,并确保执行整数加法而不是字符串串联 比较这两种情况,例如: var i = '1'; var result = i + 1; // result = '11'; var result2 = +i + 1; //

jQuery的
.eq()
是:

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

+i+1
中第一个
+
的要点是什么?

将值转换为整数,并确保执行整数加法而不是字符串串联

比较这两种情况,例如:

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];

一元
+
运算符将操作数强制为数字类型。其思想是修复字符串值,如
'1'
'2'
'3'
,等等。

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


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

,那么为什么不对i?@Randomblue的另一个实例执行此操作呢?很可能是因为
slice
方法已经执行了此强制转换。哼。如果有人做了
eq('-1')
?然后,
i===-1
将为false,因此将调用三元语句的最后一部分,这是不正确的。(虽然tbh,一个整数的明确状态是预期的参数类型,因此如果我在编写该函数,首先我不会为
+i
而烦恼…@pimvdb幸运的是,jQuery确实定义了术语的含义。)“整数”的意思是:
:)
为什么
+
不到处使用呢?@Randomblue:因为
+i+1
是唯一执行数学运算的表达式。@Randomblue在
==
操作中不需要它,因为该操作已经检查了类型(在这种情况下,左操作数必须是数字类型,因为右操作数是那种类型)。啊哈。那么看来,大小写
.eq('-1')
不是固定的。@Randomblue是的,
.eq('-2')
.eq('-0')
起作用,但
.eq('-1'))
没有。请注意,
i===-1
检查之所以完成,是因为
eq(-1)
是唯一不能被
slice
替换的情况。例如
eq(2)
slice(2,3)
eq(-2)
slice(-2,-1)
,但是
eq(-1)
不能成为
slice(-1,0)
由于该选项不起作用……如果
.slice
-0
0
之间存在差异(这在JavaScript中是不同的值),那就太好了。