私はjQueryソース、特にinArray
メソッドでいくつかのことを調べていましたが、次のコード行を見つけました。
i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
私が見ているのは2つの三項演算子ですが、これがどのように使用されているのかわかりません。三項演算子がどのように機能するかは理解していますが、これまでこのように使用されたのを見たことがありません。このコードはどのように機能しますか?
私はjQueryソース、特にinArray
メソッドでいくつかのことを調べていましたが、次のコード行を見つけました。
i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
私が見ているのは2つの三項演算子ですが、これがどのように使用されているのかわかりません。三項演算子がどのように機能するかは理解していますが、これまでこのように使用されたのを見たことがありません。このコードはどのように機能しますか?
あなたがするようにそれを分解してください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」は配列の長さですか?
その場合、その行は次のことを行います。
もし i が false と同一視できるなら、それは 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;