alert(window==document)与alert(document==window)

来源:百度知道 编辑:UC知道 时间:2024/06/14 19:34:26
我测试的结果为:
alert(window==document)返回true
alert(document==window)返回false
很奇怪。。。
使用==跟两个比较数的前后位置有关?还是window和document的原因?
(测试环境:IE7、IE8)
我还以为我问的每个问题都那么冷门,今天上来一看总算有人搭理了,不过好像还是解不开,也许就是个没什么意义的问题吧~
安息吧~~~~0-0
xlang_new 说的好像比较有道理~~~

javascript有自动变性的功能
比如alert("0"==0),会将后者的0变成字符串,再与前者的字符串"0"相比较
而alert(0=="0"),则会将字符串"0"转化为数字,再与数字0比较
明白这个道理后,再来看
alert(window==document),后者要先转化为window对象,在IE下是可行的,所以true了
alert(document==window),window转化为document对象,不可行,所以false了
深入分析:document是window的子对象,它转换为window对象时,window的其它属性可以取默认值,所以可以转化为window。而window想转化为document,需要舍弃其它属性,这个就不合理了,故。。。。

经过我自己测试,发现
alert("00"==0)和alert(0=="00")均为true,看起来有个转化优先次序,也就是说数字与字符串比较时,均以字符串转化为数字来比较。或许是window和document不存在这个转化优先,所以以我上面所述规则来判别吧。

我也不知道为什么,在 Opera 和 Safari 里测试,两个都是 false

我觉得两个不应该相等的

补充:我也觉得不太好解开。不同浏览器,对这个问题的理解似乎不一样。IE 比较另类。

儿子(document)可以属于父亲(window)
但父亲并不能属于儿子, 这就是is a 和has a 的关系
我觉得我说的挺形象的 哈哈

windows 比 document 大。windows 包含 document 所以返回true

-----------------------------------------------------
这个问题跟window和document没有关系
----------------------------------------------------