我正在經歷的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;
}
以任何機會,是 「我」 的索引到一個數組和 「LEN」 的長度數組?
如果是這樣,那麼該行會做到以下幾點:
,如果我可以等同於false,那麼假定它是0
否則,如果我爲正或0,則因爲它是
否則,如果我是負數,那麼認爲它是一個從數組末尾算起的指數(即如果i == -1,則表示數組的最後一個元素)。
i = i ? i < 0 ? Math.max(0, len + i) : i : 0;
讀取到
i = i ? (i < 0 ? Math.max(0, len + i) : i) : 0;
正是你如何期望;分解它。 –
怎麼回事:我=我? ((i <0)?Math.max(0,len + i):i):0; – thang
寫這樣的代碼沒有括號的人.. ugh – ThiefMaster