JavaScript中的双三元组

Set*_*hen 11 javascript

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

i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
Run Code Online (Sandbox Code Playgroud)

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

Nie*_*sol 16

像你一样打破它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.
}
Run Code Online (Sandbox Code Playgroud)

事实上,整条线对我来说似乎效率低下.就个人而言,我只是使用:

if (i < 0) { 
    i = Math.max(0, len + i);
}
Run Code Online (Sandbox Code Playgroud)

  • 原始的三元语句处理`i`未定义或为false并将其设置为'0'的情况.我想你在缩短的版本中会遗漏它. (3认同)

Kev*_*sox 9

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;
}
Run Code Online (Sandbox Code Playgroud)