jQuery的.eq()
是:
eq: function( i ) {
return i === -1 ?
this.slice( i ) :
this.slice( i, +i + 1 );
},
在“+i + 1”中,第一个“+”的作用是什么?
jQuery的.eq()
是:
eq: function( i ) {
return i === -1 ?
this.slice( i ) :
this.slice( i, +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];
eq('-1')
,那么i === -1
将会是false,因此三元运算符语句的最后一部分将被执行,这是不正确的。 - Randomblue:)
- Šime Vidas+
运算符将操作数强制转换为数字类型。其目的是修复类似于 '1'
, '2'
, '3'
等字符串值。+
呢? - Randomblue.eq('-1')
这个情况还没有解决。 - Randomblue+i
是一个字符,而parseInt(i,10)
则是14个字符。 - pimvdb+1 === -1
修复了这个“问题”,不需要使用 parseInt
。 - Šime Vidas它确保i
被视为数字而不是字符串。
如果3
被视为字符串,那么3 + 1
将会是31
。
i === -1
检查的全部原因是因为只有eq(-1)
这种情况无法被slice
替换。例如,eq(2)
相当于slice(2,3)
,eq(-2)
相当于slice(-2,-1)
,但是eq(-1)
无法变成slice(-1,0)
,因为那样不起作用... - Šime Vidas.slice
在JavaScript中区分-0
和0
(它们是不同的值),那就太好了。 - pimvdb