JavaScript中的Boolean,你了解多少?

简介:
今天看了一下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  +   "  and resY =  "   +   resY);
alert(
 " resXObject =  "   +  resXObject  +   "  and resYObject =  "   +  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  +   " , but in the condition statement, the xObject value is evaluated to true " );
else
    alert(
" xObject = false " );
输出结果:
=   false
xObject 
=   false,  but in the condition statement, the xObject value is evaluated to true
当一个值为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(
" The resXObject value is  "   +  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

js.JPG 

我对ob2 和 ob3的结果不太理解,为什么我只是更改了ob1和true的顺序,结果去完全不同了。并且可以发现,结果均等于操作符“&&”后面的值。
希望大家能告诉我!
问题已经解决: 
||是这样运算的:从第一个开始,遇到有意义的返回,否则返回最后一个表达式(注意不一定是Boolean值); 
&&是这样运算的:从第一个开始,遇到无意义的返回,否则返回最后一个表达式(注意同上); 
!是这样运算的:对表达式的值取非(注意不是对表达式)。 
什么是无意义呢:如下六个 0,null,undefined,"",false,NaN。除此,视为有意义。 
new Boolean(),new Boolean(false)是同一个东西,由于它是一个对象,故是有意义的,但其值为false,所以,可以看为“有意义的false”,所以结果为最后一个表达式的值。 
谢谢
  jeffjie 

继续学习^+^ 

本文转自BlogJavaOo缘来是你oO的博客,原文链接:JavaScript中的Boolean,你了解多少?,如需转载请自行联系原博主。


相关文章
|
前端开发 JavaScript
前端基础 - JavaScript值Boolean类型的默认转换
前端基础 - JavaScript值Boolean类型的默认转换
66 0
|
2月前
|
JavaScript 前端开发
JavaScript Boolean(布尔) 对象
JavaScript Boolean(布尔) 对象
22 3
|
3月前
|
JavaScript 前端开发
JavaScript Boolean(布尔) 对象
Boolean(布尔)对象用于将非布尔值转换为布尔值(true 或者 false)。
41 8
|
6月前
|
JavaScript 前端开发 索引
JavaScript有7个数据类型:Number, String, Boolean, Null, Undefined, Symbol(BES6)和BigInt(ES10)组成基本类型
【6月更文挑战第25天】JavaScript有7个数据类型:Number, String, Boolean, Null, Undefined, Symbol(BES6)和BigInt(ES10)组成基本类型,而Object包括Array、Function等是引用类型。Objects可以包含键值对,Array是特殊的Object。Functions也是对象。`null`和`undefined`被视为特殊的原始值。
57 1
|
7月前
|
JavaScript
.js基础——js强制类型转换(转为boolean)
.js基础——js强制类型转换(转为boolean)
51 1
|
7月前
|
JavaScript 前端开发
编程笔记 html5&css&js 068 JavaScript Boolean数据类型
编程笔记 html5&css&js 068 JavaScript Boolean数据类型
|
JavaScript
每日JS:转换为布尔型(boolean)你掌握住了吗~
每日JS:转换为布尔型(boolean)你掌握住了吗~
|
7月前
|
JavaScript 前端开发
js基础语法:包括变量声明、数据类型(Number, String, Boolean, Null, Undefined, Symbol, Object)、运算符、流程控制语句(if...else, switch, for, while, do...while)等。具体案例使用演示
js基础语法:包括变量声明、数据类型(Number, String, Boolean, Null, Undefined, Symbol, Object)、运算符、流程控制语句(if...else, switch, for, while, do...while)等。具体案例使用演示
87 1
|
7月前
|
JavaScript 前端开发
JavaScript基础语法:包括变量声明、数据类型(Number, String, Boolean, Null, Undefined, Symbol, Object)、运算符、流程控制语句(if...else, switch, for, while, do...while)等。
JavaScript基础语法:包括变量声明、数据类型(Number, String, Boolean, Null, Undefined, Symbol, Object)、运算符、流程控制语句(if...else, switch, for, while, do...while)等。
71 0
|
JavaScript
TypeScript 与 JS 中类型首字母大小写区别(String、string、Number、number、Boolean、boolean ...)
TypeScript 与 JS 中类型首字母大小写区别(String、string、Number、number、Boolean、boolean ...)
318 0