いいえ、それはあなたが持っているものと同等ではありません。元のコード:
while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
これと同等です:
while (elem.previousSibling && elem.previousSibling.nodeType !== 1) {
elem = elem.previousSibling;
//other code here
}
論理的には、 previousSibling
と previousSibling
nodeType!== 1
の間にループし、 elem
>を previousSibling
に追加します。
元のwhile条件の代入は、別の代入を保存し、余分な参照レベルを nodeType
チェックに保存するショートカットです。
whileループをさらに細分化すると、これは次のようになります。
while (elem.previousSibling) {
elem = elem.previousSibling;
if (elem.nodeType !== 1) {
break;
}
//other code here
}
この部分:
(elem = elem.previousSibling)
elem
に elem.previousSibling
を割り当て、elemが真実かどうかを評価します。