JavaScript中的Boolean,你了解多少?

系统 1827 0
今天看了一下 Flyingis 写的《 ECMAScript 基础 》一文。在看到 Boolean类这一块内容的时候,随手写了几行代码,问题出现了^+^
注:此文讨论的是JavaScript1.5


还是先来看一段非常简单的代码

// code:1
var x = false ;
var y = true ;

// code:2
var xObject = new Boolean( false );
var yObject = new Boolean( true );

// code:3
var resX = new Boolean(x);
var resY = new Boolean(y);

// code:4
var resXObject = new Boolean(xObject);
var resYObject = new Boolean(yObject);

// code:5
alert( " resX= " + resX + " andresY= " + resY);
alert(
" resXObject= " + resXObject + " andresYObject= " + resYObject);

你明白code:1~4 之间的区别么?(你一定对code:1最为熟悉,这是我们最常用的)
你知道code:5 的输出结果么?(可以先想想,在运行代码看结果,如果不明白,可以继续看下去)


如果你已经开始头晕了,那就暂时不去想了,看我下面的解释。
如果你都知道了(哇,高手啊,呵呵^+^),那我还有个问题需要你的解答,在此先谢过了。


正文:
JavaScript中的Boolean类型

1.我们所熟悉的

var x = false;
var y = true;

这是我们大家都熟悉的,此时我们使用的是原始的Boolean值(the primitive Boolean values )true和false

2.我们很少用到的

var xObject = new Boolean(false);
var yObject = new Boolean(true);

此时我们声明了一个Boolean对象,Boolean对象是对Boolean值的一个封装。
Boolean对象:一个值为true或false的Boolean对象。

原始的Boolean值和Boolean对象是有区别的,不要相互混淆,引用Core JavaScript 1.5 Reference中的一句话:Do not confuse the primitive Boolean values true and false with the true and false values of the Boolean object.


3.区别

区别(1):声明形式

区别(2):在条件语句(condition statement)中

var x = false ;
var xObject = new Boolean( false );

if (x)
alert(
" x=true " );
else
alert(
" x=false " );

if (xObject)
alert(
" xObject= " + xObject + " ,butintheconditionstatement,thexObjectvalueisevaluatedtotrue " );
else
alert(
" xObject=false " );


输出结果:

x = false
xObject
= false,butintheconditionstatement,thexObjectvalueisevaluatedtotrue


当一个值为false的Boolean对象放到条件语句当中的时候,Boolean对象的值会被当作true来计算,但是它本身的值并没有改变,依然是false。很有趣,我只知道现象,具体原因不清楚,不知道发明者出于什么地考虑。但是在JavaScript1.2或者更早的版本中却有所不同,在条件语句(condition statement)中,Boolean对象的计算返回的是其对应的原始Boolean的值。


区别(3):初始化Boolean对象

声明一个Boolean对象,如果我们用一个值为false的Boolean对象对其进行初始化,则新的Boolean对象的值为true

var xObject = new Boolean( false );
var resXObject = new Boolean(xObject);
alert(
" TheresXObjectvalueis " + resXObject);

原始的Boolean值和Boolean对象区别如此之大,所以切记二者区别,不要混淆使用。

对于code:5 的输出结果,你现在明白是什么原因了吧。



上面的东东我也是今天遇到了问题,查了一些资料才知道,学无止境啊。可是我的问题依然没有解决。
我的问题是关于Boolean对象的初始化。代码如下,

var ob1 = new Boolean( false );
var ob2 = (ob1 && true );
var ob3 = ( true && ob1);
var ob4 = Boolean(ob1 && true );
var ob5 = Boolean( true && ob1);
alert(
" ob2= " + ob2 + " ob3= " + ob3 + " ob4= " + ob4 + " ob5= " + ob5);

结果:

ob2 = true ob3 = false ob4 = true ob5 = true



我对ob2 和 ob3的结果不太理解,为什么我只是更改了ob1和true的顺序,结果去完全不同了。并且可以发现,结果均等于操作符“&&”后面的值。

希望大家能告诉我!


问题已经解决:

||是这样运算的:从第一个开始,遇到有意义的返回,否则返回最后一个表达式(注意不一定是Boolean值);

&&是这样运算的:从第一个开始,遇到无意义的返回,否则返回最后一个表达式(注意同上);

!是这样运算的:对表达式的值取非(注意不是对表达式)。

什么是无意义呢:如下六个 0,null,undefined,"",false,NaN。除此,视为有意义。

new Boolean(),new Boolean(false)是同一个东西,由于它是一个对象,故是有意义的,但其值为false,所以,可以看为“有意义的false”,所以结果为最后一个表达式的值。

谢谢 jeffjie

继续学习^+^

JavaScript中的Boolean,你了解多少?


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论