◆ window と self の比較で === だと false になる
◆ == だと true

古い IE でサポートしてません画面出すために 古い IE で動かすコードを書いていたのですが == と === の動きが IE8 以前と IE9 以降で違うようです

IE8 でトップフレームのスクリプトでこれを実行します
console.log(self === window)
console.log(self == window)
console.log(parent === window)
console.log(parent == window)
console.log(top === window)
console.log(top == window)

結果はこうです

false
true
false
true
false
true

両方が false ならまだしも片方だけが true です
オブジェクトに対しては == も === も参照を比較するだけのはずなのに == と === で結果が異なるのがよくわかりません
古い IE ですし IE 独自仕様でしょうか

IE9 以上や Chrome などでは全部 true です

また false になる条件を調べてみると window 以外の window を取得するもの (self など) を一度でも経由すると window とは別物になるようで window と比較すると false になりました

self === window.self
// true
self === self.window
// true
window === window.self
// false
window === self.window
// false

self.window は self を経由してるので window とは違うものとみなされています
self などを経由せず window.window だと window と一緒です


なんでこうなるのかはわかりませんが とりあえず対策には == を使っておけばよさそうです
ただ オブジェクト同士の比較でないときまで ==  にしてしまうと型変換してしまうので そこには気をつけないといけないです