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

JavaScript: What's the difference between window.top and top.window

我最近一直在阅读 JavaScript top 功能并注意到我可以 运行 window.toptop.window。据我所知,功能上没有区别,所以似乎很奇怪 运行 两者都可以。

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

MDN documentation

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

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

之间的区别
window.top

window.top.window

window.top 给你一个 window 对象(它可能与 window 相同,也可能是外部 window,如果你在iframe),而 window 的 window 属性 是对同一个 window 对象的引用(这是一个奇怪的自引用),所以这两个引用正是也一样。你可以指望

window.top === window.top.window

永远是true