JavaScript中的双三元
我浏览了jQuery源代码中的一些内容,特别是JavaScript中的双三元,javascript,Javascript,我浏览了jQuery源代码中的一些内容,特别是inArray方法,发现了以下代码行: i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; i=i?i
inArray
方法,发现了以下代码行:
i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
i=i?i<0?max(0,len+i):i:0;
我看到的是两个三元运算符,但我不知道如何使用它。我知道三元运算符是如何工作的,但我以前从未见过这样使用它。这段代码是如何工作的呢?就像你将它分解成
1+2+3
:
if (i) {
if (i < 0) {
i = Math.max(0, len + i);
} else {
i = i; // no-op
}
} else {
i = 0; // also no-op, since if `i` were anything else it would be truthy.
}
if(i){
if(i<0){
i=数学最大值(0,len+i);
}否则{
i=i;//无操作
}
}否则{
i=0;//也没有op,因为如果'i'是其他任何东西,那就是真实的。
}
事实上,在我看来,整个生产线似乎效率低下。就我个人而言,我只会使用:
if (i < 0) {
i = Math.max(0, len + i);
}
if(i<0){
i=数学最大值(0,len+i);
}
i=i?i<0?max(0,len+i):i:0代码>
细分为:
var i;
if(i){
if(i<0){
i = Math.max(0, len + i);
}else{
i = i;
}
}else{
i = 0;
}
vari;
如果(i){
如果(i有可能,“i”是数组的索引,“len”是数组的长度吗
如果是这样,则该行将执行以下操作:
- 如果我可以等同于false,那么假设它是0
- 否则,如果i为正或0,则按原样处理
<如果> i是负的,则将其视为从数组末尾计数的索引(即,如果i==1,则表示数组的最后一个元素)。
i=i?i<0?数学最大值(0,len+i):i:0;
读到
i = i ? ( i < 0 ? Math.max( 0, len + i ) : i ) : 0;
i=i?(i<0?数学最大值(0,len+i):i:0;
完全符合您的期望;将其分解。i=i((i<0)数学。max(0,len+i):i如何:0;编写这样没有括号的代码的人..或者编写这样的代码的人..炫耀,但做得不正确。在现代JavaScript教程中,这也是一个很糟糕的例子:谢谢你澄清了这一点。我们为什么要做Math.max(0,len+1)
?我意识到要找到最大的值,但为什么会发生这种情况?没有op代表什么?没有操作。值没有任何变化。这是Math.max(I,len+I)。这是一个i而不是1。原始的三元语句处理i
未定义或为false的情况,并将其设置为0
。我认为您在缩短的版本中可能会遗漏这一点。
i = i ? ( i < 0 ? Math.max( 0, len + i ) : i ) : 0;