JavaScript中的双三元组

时间:2013-01-20 18:22:47

标签: javascript

我正在浏览jQuery源代码中的一些内容,特别是inArray方法,我找到了这行代码:

i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;

我所看到的是两个三元运算符,但我不知道如何使用它。我理解三元运算符是如何工作的,但我以前从未见过它像这样使用过。这段代码是如何工作的?

4 个答案:

答案 0 :(得分:14)

就像你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);
}

答案 1 :(得分:7)

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

答案 2 :(得分:1)

任何机会,“i”是数组的索引,“len”是数组的长度吗?

如果是这样,那么该行将执行以下操作:

  • 如果我可以等同于假,那么假设它是0

  • 否则,如果我是肯定的或0,那么就把它原样

  • 否则,如果我是否定的,则将其视为从数组末尾开始计数的索引(即,如果i == - 1,则表示数组的最后一个元素)。

答案 3 :(得分:1)

i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;

读到

i = i ? ( i < 0 ? Math.max( 0, len + i ) : i ) : 0;