Пустой блок в коде jQuery

#jquery

#jquery ( jquery )

Вопрос:

Строка 4140 jQuery 1.7rc1:

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

На мой взгляд, это странно. Эквивалентно ли это

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

Комментарии:

1. Вау, я и не знал, что в jQuery делают такие хаки…

Ответ №1:

Нет, это не эквивалентно тому, что у вас есть. Исходный код:

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

эквивалентно этому:

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

Логически, это говорит о циклическом выполнении, пока есть previousSibling и, пока previousSibling's 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.previousSibling elem , а затем оценивает, является ли elem правдивым или нет.