Каждый отдельный window
- это отдельный глобальный контекст для интерпретатора (и да, я пока игнорирую IE7). Ваша проблема действительно становится ясной, когда вы думаете о instanceof
:
if (something instanceof Array) { ... }
Проблемы с этим возникают, когда «что-то» - это значение, которое было создано в отдельном контексте, например, в iframe. Каждое окно имеет свою собственную копию конструктора «Array», поэтому, даже если объект может быть экземпляром Array, он не является экземпляром той же функции конструктора.
Я подозреваю, что поведение IE7 связано с какой-то другой странностью, которую я думаю, что - это что-то вроде window.window
, не равное window
. Мол, один из них на самом деле является ссылкой на что-то внутреннее. (Может быть, window
не равно window.self
, хотя в остальном они ведут себя одинаково. Я не трачу много философского времени на размышления о IE7.)