为什么"window = window.parent;" 创造一个无限循环?

Ste*_*sky 6 javascript dom

我正在遍历框架层次结构,并尝试以下内容来查找顶部框架:

var win = window;
while (win.parent) {
    //perform actions on win
    win = win.parent;
}
Run Code Online (Sandbox Code Playgroud)

到现在为止,我知道正确的循环条件必须是:

while (win !== top) {
Run Code Online (Sandbox Code Playgroud)

存在检查win.parent似乎创造了一个无限循环.这有什么特别的原因吗?为什么top要有父母?

Sim*_*röm 6

您也应该检查是否window.parent == window?false病程否则你将最终获得一个无限循环.如果父属性没有父将引用它(无限循环),则为Couse.

var win = window;
while (win.parent && win.parent != win) {
    //perform actions on win
    win = win.parent;
}?
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/EZfHf/

我在MDN上发现了这个:

如果窗口没有父窗口,则其父属性是对自身的引用.

链接到MDN:

https://developer.mozilla.org/en/DOM/window.parent