为什么这些 javascript 对象是相等的?

Why are these javascript objects equal?

提问人:jgrune 提问时间:3/30/2019 更新时间:3/30/2019 访问量:56

问:

我了解到,在 javascript 中,对象是通过引用传递的,因此,检查两个对象的相等性并不像 那么简单,即使这些对象具有相同的属性。那么,为什么在浏览器的上下文中,以下代码等同于 true?objA === objB

window.self === window.top

window.self 和 window.top 都将返回 window 对象。我怀疑答案与具有特定类型类型的窗口对象有关,但我希望有人具体详细说明在这种情况下对象相等性与常规对象比较有何不同。Window

JavaScript 对象 相等

评论

4赞 Teemu 3/30/2019
在测试用例中,这些属性仅引用同一对象 .如果你在 iframe 中检查这种相等性,你会得到 .windowfalse
1赞 Christoph Herold 3/30/2019
Teemu是绝对正确的。在顶层框架中,您可以比较 4 个对象,它们都是相同的引用: === === === 。 并且始终是同一个对象。 始终是窗口(或选项卡)中最顶层的框架,当您在 HTML 中嵌套或元素时,为您提供父框架。windowwindow.selfwindow.parentwindow.topwindowwindow.selfwindow.topwindow.parent<frameset><iframe>
0赞 dandavis 3/30/2019
window、top、self 和(有时)this,都是同一件事,只是名称不同,除非在某些情况下。

答: 暂无答案