首页 新闻 会员 周边

一个关于Boolean类的问题

0
悬赏园豆:30 [已解决问题] 解决于 2009-03-23 11:22

var oUpdated=new Boolean(false);
alert(oUpdated
&& true);
以上代码显示“true”,因为所有对象在Boolean表达式中都被自动转换成true,但以下代码为什么却返回false ?

var oUpdated=new Boolean(false);
alert(oUpdated
|| false);

问题补充: 晕,博客园博问中插入代码功能那里存在Bug,我输入的两块代码应该是这样的: 第一块代码: var oUpdated=new Boolean(false); alert(oUpdated && true); 第二块代码: var oUpdated=new Boolean(false); alert(oUpdated || false); 不知道生成问题的时候却没有了一部分代码了。
Tuwi的主页 Tuwi | 初学一级 | 园豆:0
提问于:2009-03-14 10:59
< >
分享
最佳答案
0

我想是这样吧!在javascript中Boolean往往不被人们重视,因为一般不是特别关于Javascript的情况下即时用到了Boolean类型时我们也只是如此来用:var ok=false;等。可实际上我们并未对Boolean本身做太多的追责。

Boolean在javascript中是原始类型,但很有趣的是他的原始值也同时是伪对象,哪么既然是伪对象,当然他们会具备Object的一些方法和属性。

哪么针对你上面的问题,我们不难看出,你这里是使用false来创建了一个Boolean对象oUpdated,哪么你在进行alert(oUpdated && true)做and操作的时候,这里是oUpdated对象本身,而Javascript中Boolean表达式的所有对象都会被自动转换为true,因此这里alert的结果一定是true,而不是false。同时我建议你在alert(oUpdated && true)前面先alert(typeof(oUpdated));结果是object。哪么这样结果就会不言而喻!

哪么下面的操作alert(oUpdated || false)我想他和alert(oUpdated || true)的结果都是一样的,同时返回false。这里为什么返回的false,我想不用说了,他返回的是oUpdated的值,不是oUpdated这个Boolean对象。这是由于||操作符决定了这个结果,首先会判断oUpdated,因为他是用Boolean创建的一个的对象,Boolean表达式决定了oUpdated永远是true,所以alert(oUpdated || false)时就会返回oUpdated,此时既然要返回oUpdated,当然他返回的只能是oUpdated的值false了。

我想我这样说应该是很明白了吧!_:)

如果还不能理解的话,可以给我发站类信继续交流的........

 

 

 

 

西越泽 | 专家六级 |园豆:10775 | 2009-03-14 22:41
其他回答(5)
0

new Boolean('')也为false吧……

Gray Zhang | 园豆:17610 (专家六级) | 2009-03-14 11:30
0

你上面两句不是一样吗?

CoderZh | 园豆:298 (菜鸟二级) | 2009-03-14 12:01
0

在这段代码中,用 false 值创建 Boolean 对象。然后用这个值与原始值 true 进行 AND 操作。在 Boolean 运算中,false 和 true 进行 AND 操作的结果是 false。不过,在这行代码中,计算的是 oUpdated,而不是它的值 false。

在 Boolean 表达式中,所有对象都会被自动转换为 true,所以 oUpdated的值是 true。然后 true 再与 true 进行 AND 操作,结果为 true。

Fencer | 园豆:7 (初学一级) | 2009-03-14 13:46
0

 

在这段代码中,用 false 值创建 Boolean 对象。然后用这个值与原始值 true 进行 AND 操作。在 Boolean 运算中,false 和 true 进行 AND 操作的结果是 false。不过,在这行代码中,计算的是 oUpdated,而不是它的值 false。

在 Boolean 表达式中,所有对象都会被自动转换为 true,所以 oUpdated的值是 true。然后 true 再与 true 进行 AND 操作,结果为 true。非常正确!加十分!!

子夜星辰 | 园豆:1613 (小虾三级) | 2009-03-14 14:09
0

mark...

Jared.Nie | 园豆:1940 (小虾三级) | 2009-03-14 16:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册