jQuery代码中的空块

Ran*_*lue 2 jquery

jQuery 1.7rc1的4140行:

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

这对我来说很奇怪.它等同于

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

jfr*_*d00 5

不,它不等于你所拥有的.原始代码:

while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
Run Code Online (Sandbox Code Playgroud)

相当于:

while (elem.previousSibling && elem.previousSibling.nodeType !== 1) {
    elem = elem.previousSibling;
    // other code here
}
Run Code Online (Sandbox Code Playgroud)

从逻辑上讲,它表示循环,同时有一个previousSibling并且同时previousSibling's nodeType !== 1分配elem给它previousSibling.

原始条件中的分配是一种快捷方式,可以保存单独的分配并在nodeType检查中保存额外的参考级别.

再打破while循环,它与此相同:

while (elem.previousSibling) {
    elem = elem.previousSibling;
    if (elem.nodeType !== 1) {
        break;
    }
    // other code here
}
Run Code Online (Sandbox Code Playgroud)

这部分:

(elem = elem.previousSibling)
Run Code Online (Sandbox Code Playgroud)

分配elem.previousSiblingelem并然后评估ELEM是否truthy与否.