javascript太NB,有人想的通吗? true & false这个原因我狂查一阵试试。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <script type="text/javascript">for (var property in window) { if (property == "document") alert(property);}//可能是因为window包括document吧。。</script> alert(window == top);alert(window == self); alert(window === document); //就可以啦; 不可以呀alert(window==top) truealert(window===top) false 感觉莫名奇妙,应该是false才对,结果发现顺序不一样结果竟然不一样! 找到一个解释,是这样说的:如果“==”左边的对象和右边对象是同一对象或是右边的对象的父对象,true,否则false 相等运算符 (==) 如果两表达式的类型不同,则试图将它们转换为字符串、数字或 Boolean 量。 NaN 与包括其本身在内的任何值都不相等。 负零等于正零。 null 与 null 和 undefined 相等。 相同的字符串、数值上相等的数字、相同的对象、相同的 Boolean 值或者(当类型不同时)能被强制转化为上述情况之一,均被认为是相等的。 其他比较均被认为是不相等的。 恒等运算符 (===) 除了不进行类型转换,并且类型必须相同以外,这些运算符与相等运算符的作用是一样的。 找到一个解释,是这样说的:如果“==”左边的对象和右边对象是同一对象或是右边的对象的父对象,true,否则false这个解释说不过去。如下:alert(window==history)alert(window==event)alert(window==location) 我猜测:alert(window==document); 相当于 alert(window.document==document);而alert(document==window); 相当于 alert(document.window==window); 按楼上的解析 都是返回true了 document就没有window这个对象,怎么能返回true呢?显然不能。 window | ----------------------------- | | | history document location 我想问题根源应该是来自于IE对 document对象 的处理方法的特殊性吧。 alert("window:"+window.document);alert("document:"+document);alert(window.document==document);alert(document==window.document); alert(window==document);alert(document==window);前面的一个在IE中是true,在FF中是Flase第二个在IE和FF中都是flase难道说,IE中把document和window当成一样的存在了?不过有可能呢~貌似微软就是这么处理的说…… alert("window:"+window.document);alert("document:"+document);alert(window.document==document);alert(document==window.document);这个……前两个的现实内容IE和FF不一样……后面的好像一样的说……为什么前面两个不一样? 在IE中,this=window>=document因为一个window里面只包含了一个document对象,当执行window==document时,实际上是拿window.document和document进行比较而执行document==window时,不能根据document找到window对象,这是IE这样解释javascript造成的。而在firefox中,他们是不同的对象,纯属个人见解 头一次看到,原来js中也有 === 衡等运算符。使用===能够准确的说明,document和window的确不是一个对象。"当执行window==document时,实际上是拿window.document和document进行比较"不明白微软为什么这么处理 如果是ie的bug我们想这些有意义吗 ls此言差矣JS的门槛是比较低,但是它又远比大多数人想像的复杂 与insertAdjacentHTML对应的删除该怎么写? JS如何实现控制DIV边角成圆角, 兄弟们有没有现成的带农历的js控件? 手机端后退不运行ajax 怎么会取不到值 二级联动的问题,联动已实现,但是我现在想从另个页面传个值过去,根据该值来更新联动,不知道如何下手 帮忙解决日期判断的问题?谢谢! 有人用javascript做过网站的计数器吗?急 请教一个innerHtml的简单问题 如何下载以中文命名的文件???? Javascript的正则表达式如何匹配中括号[]?? div的滚动条问题
for (var property in window) {
if (property == "document") alert(property);
}
//可能是因为window包括document吧。。
</script>
alert(window == self);
alert(window==top) true
alert(window===top) false
如果“==”左边的对象和右边对象是同一对象或是右边的对象的父对象,true,否则false
NaN 与包括其本身在内的任何值都不相等。
负零等于正零。
null 与 null 和 undefined 相等。
相同的字符串、数值上相等的数字、相同的对象、相同的 Boolean 值或者(当类型不同时)能被强制转化为上述情况之一,均被认为是相等的。
其他比较均被认为是不相等的。 恒等运算符 (===) 除了不进行类型转换,并且类型必须相同以外,这些运算符与相等运算符的作用是一样的。
如果“==”左边的对象和右边对象是同一对象或是右边的对象的父对象,true,否则false这个解释说不过去。
如下:
alert(window==history)
alert(window==event)
alert(window==location)
alert(window==document); 相当于 alert(window.document==document);
而
alert(document==window); 相当于 alert(document.window==window);
|
-----------------------------
| | |
history document location
alert("document:"+document);
alert(window.document==document);
alert(document==window.document);
alert(document==window);
前面的一个在IE中是true,在FF中是Flase
第二个在IE和FF中都是flase
难道说,IE中把document和window当成一样的存在了?不过有可能呢~貌似微软就是这么处理的说……
alert("window:"+window.document);
alert("document:"+document);
alert(window.document==document);
alert(document==window.document);这个……前两个的现实内容IE和FF不一样……后面的好像一样的说……为什么前面两个不一样?
因为一个window里面只包含了一个document对象,
当执行window==document时,实际上是拿window.document和document进行比较
而执行document==window时,不能根据document找到window对象,
这是IE这样解释javascript造成的。
而在firefox中,他们是不同的对象,纯属个人见解
使用===能够准确的说明,document和window的确不是一个对象。"当执行window==document时,实际上是拿window.document和document进行比较"不明白微软为什么这么处理
JS的门槛是比较低,但是它又远比大多数人想像的复杂