Почему эти объекты javascript равны?

#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 — это одно и то же, но с разными именами, за исключением определенных обстоятельств.