#javascript #object #equality
#javascript #объект #равенство
Вопрос:
Я узнал, что в javascript объекты передаются по ссылке, и в результате проверить равенство двух объектов не так просто, как objA === objB
, даже если эти объекты имеют одинаковые свойства. Почему тогда в контексте браузера следующий код равен true?
window.self === window.top
Оба окна.self и window.top вернут объект window. Я подозреваю, что ответ имеет какое-то отношение к объекту window, имеющему определенный тип type Window
, но я надеюсь, что кто-нибудь уточнит, чем конкретно отличается равенство объектов в этом случае от обычного сравнения объектов.
Комментарии:
1. В вашем тестовом примере эти свойства просто ссылаются на один и тот же объект,
window
. Если бы вы проверили это равенство в iframe, вы бы получилиfalse
.2. Teemu абсолютно прав. Когда во фрейме верхнего уровня вы можете сравнить 4 объекта, и все они являются одной и той же ссылкой:
window
===window.self
===window.parent
=window.top
=== ——————-window
иwindow.self
всегда являются одним и тем же объектом.window.top
всегда является самым верхним фреймом в окне (или вкладке),window.parent
дает вам родительский фрейм, когда у вас есть вложенные элементы<frameset>
или<iframe>
в вашем html.3. window, top, self и (иногда) this — это одно и то же, но с разными именами, за исключением определенных обстоятельств.