jQueryコードの空のブロック

jQuery 1.7rc1の4140行目:

while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}

これは私の目には変です。それは

while( elem && elem.nodeType !== 1 ) elem = elem.previousSibling;?

2
Whoa、jQueryでこれらのようなハッキングをしているのを知らなかった...
追加された 著者 Šime Vidas,

1 答え

いいえ、それはあなたが持っているものと同等ではありません。元のコード:

while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}

これと同等です:

while (elem.previousSibling && elem.previousSibling.nodeType !== 1) {
    elem = elem.previousSibling;
   //other code here
}

論理的には、 previousSiblingpreviousSibling nodeType!== 1 の間にループし、 elem >を previousSibling に追加します。

元のwhile条件の代入は、別の代入を保存し、余分な参照レベルを nodeType チェックに保存するショートカットです。

whileループをさらに細分化すると、これは次のようになります。

while (elem.previousSibling) {
    elem = elem.previousSibling;
    if (elem.nodeType !== 1) {
        break;
    }
   //other code here
}

この部分:

(elem = elem.previousSibling)

elemelem.previousSibling を割り当て、elemが真実かどうかを評価します。

5
追加された