我正在浏览 jQuery 源代码中的一些东西,特别是inArray
方法,我发现了这行代码:
i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
我看到的是两个三元运算符,但我不知道它是如何使用的。我了解三元运算符的工作原理,但我以前从未见过它像这样使用过。这段代码是如何工作的?
我正在浏览 jQuery 源代码中的一些东西,特别是inArray
方法,我发现了这行代码:
i = i ? i < 0 ? Math.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 < 0) {
i = Math.max(0, len + i);
}
i = i ? i < 0 ? Math.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;
}
无论如何,“i”是数组的索引,而“len”是数组的长度吗?
如果是这样,那么该行将执行以下操作:
如果我可以等同于假,那么假设它是0
否则,如果 i 是正数或 0,则按原样
否则,如果 i 为负数,则将其视为从数组末尾开始计数的索引(即,如果 i==-1,则表示数组的最后一个元素)。
i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
读到
i = i ? ( i < 0 ? Math.max( 0, len + i ) : i ) : 0;