现象

请在 IE 下的非 iframe 页面中运行以下代码:

alert(window === window.top); // 1
alert(self === window.top); // 2
alert(self === window); // 3
alert(window == window.top); // 4
alert(typeof self === typeof window); // 5
alert(self == window); // 6

分析

上面第 5 和第 6 行的结果都为 true. 按照 ECMA-262 的定义,按理说 self === window 应该为 true.
然而测试结果告诉我们:在 IE 下,不是这样!

结论

IE 下,top, self, parent 和对应的 window 并不全等。涉及到这些值,用 === 比较时,要谨慎。
原因没想明白。就如 IE 下一些诡异的 CSS Hack 一样,要真弄明白,也许只能去找比尔盖茨要一份 IE 的源码了。

幸运的 jQuery 和倒霉的 YUI

jQuery 1.3.2 模拟 DOMReady 的代码中 阅读全文 »