15

私はjQueryソース、特にinArrayメソッドでいくつかのことを調べていましたが、次のコード行を見つけました。

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

私が見ているのは2つの三項演算子ですが、これがどのように使用されているのかわかりません。三項演算子がどのように機能するかは理解していますが、これまでこのように使用されたのを見たことがありません。このコードはどのように機能しますか?

4

4 に答える 4

19

あなたがするようにそれを分解してください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);
}
于 2013-01-20T18:26:23.180 に答える
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;
}
于 2013-01-20T18:27:33.563 に答える
2

ひょっとして、「i」は配列のインデックスで、「len」は配列の長さですか?

その場合、その行は次のことを行います。

  • もし i が false と同一視できるなら、それは 0 であると仮定します

  • それ以外の場合、i が正または 0 の場合は、それをそのまま使用します

  • それ以外の場合、i が負の場合は、配列の末尾から数えたインデックスと見なします (つまり、i==-1 の場合、配列の最後の要素を意味します)。

于 2013-01-20T18:32:23.100 に答える
2
i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;

読む

i = i ? ( i < 0 ? Math.max( 0, len + i ) : i ) : 0;
于 2013-01-20T18:33:31.083 に答える