JavaScript:window.top 和 top.window 有什么区别

luk*_*ine 2 javascript window

我最近一直在阅读 JavaScripttop功能,并注意到我可以运行window.toptop.window. 从我所见,功能上没有区别,因此可以同时运行两者似乎很奇怪。

// They appear to be the same here at least:
console.log(window.top === top.window);
Run Code Online (Sandbox Code Playgroud)

MDN 文档

我的问题是,有谁知道为什么这个功能存在两次,两者之间有什么区别吗?我想知道浏览器支持方面的差异,或者与以一种或另一种方式运行它相关的古怪错误。

Cer*_*nce 5

window是全局对象,因此可以像访问独立变量一样访问其上的属性。因此top,在顶层引用与引用相同window.top。所以问题归结为区别在于

window.top
Run Code Online (Sandbox Code Playgroud)

window.top.window
Run Code Online (Sandbox Code Playgroud)

window.top给你一个窗口对象(它可能与 相同window,或者它可能是一个外部窗口,如果你在 iframe 中),并且窗口的window属性是对同一个window对象的引用(这是一个奇怪的自引用),所以这两个引用也完全相同。你可以指望

window.top === window.top.window
Run Code Online (Sandbox Code Playgroud)

永远是true