`
carffuca
  • 浏览: 20728 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

boolean原始类型与Boolean引用类型 -- Practical JavaScript(二)

阅读更多
作者:Carffuca
许可协议:
js 代码
 
  1. var bFound = true;  
  2. var bFlag = false;  
如上面的两行代码,boolean类型是JavaScript中的一种原始类型,它只有两种值:true和false。

使用Boolean(value)方法可以强制转换任意值为boolean类型
js 代码
 
  1. alert(Boolean('')); //outpt false  
  2. alert(Boolean('hello')); //output true  
  3. alert(Boolean(100)); //output true  
  4. alert(Boolean(0)); //output false
  5. alert(Boolean(NaN)); //output false
  6. alert(Boolean(null)); //output false  
  7. alert(Boolean(undefined)); //output false  
  8. alert(Boolean(new Object())); //output true   
可以看出,当被转换的值为空字符串、数字0和NaN、null或者undefined时,转换为false,其它情况转换为true。所以当我们写if判断的时候需要注意这些特殊的情况,尤其是使用目前比较流行的“对象探测法”书写JS时。

“对象探测法”主要写法如下:
js 代码
 
  1. var student = new Object();  
  2. if (student.name) {  
  3.   alert(student.name);  
  4. else {  
  5.   student.name = 'Tom';  
  6.   alert(student.name);  
  7. }  
if (student.name)这句用来探测student对象中存不存在name属性,如果存在则弹出;否则把name赋值为'Tom',再弹出。这边需要注意的是如果name值已经存在,并且值为空字符串或者0时,结果可能与你预期的不同。

在JavaScript中除了存在boolean类型这样的原始类型之外,还存在一种引用类型 -- Boolean类型。创建Boolean类型的对象的代码如下:
js 代码
 
  1. var oBooleanObject = new Boolean(true);  
需要注意的是这边的"new Boolean()"与前面的"Boolean()"的区别,前者是创建Boolean对象,后者为强制类型转换方法。不过,在大多数情况下Boolean类型是不常被用到的。并且在使用Boolean类型的时候还可能产生一些误会,看看下面的代码:
js 代码
 
  1. var oBooleanFalse = new Boolean(false);  
  2. alert(oBooleanFalse && true); //output true  
这边输出是true,让人觉得奇怪。当执行oBooleanFalse && true时,oBooleanFalse被强制类型转换了,而这边oBooleanFalse是一个Object,强制转换后为true。也就说这边用来计算的是oBooleanFalse对象本身,而不是它的值false。
虽然我们需要了解Boolean这种类型,但为了避免错误,最好还是使用boolean原始类型。

再看下面一个例子:
js 代码
  1. var ob1 = new Boolean(false);  
  2. var ob2 = (ob1&&true);  
  3. var ob3 = (true&&ob1);  
  4. var ob4 = Boolean(ob1&&true);  
  5. var ob5 = Boolean(true&&ob1);  
  6. alert("ob2 = " + ob2 + ", ob3 = " + ob3 + ", ob4 = " + ob4 + ", ob5 = " + ob5);
  7. //output ob2 = true, ob3 = false, ob4 = true, ob5 = true  
这边最让人困惑的就是ob2和ob3由于顺序上的不同,最终的结果居然不同。产生这样的结果主要和JavaScript中的逻辑运算符的工作方式相关。具体工作方式如下:
1. && 的工作方式:
从第一个开始,遇到值为false的表达式(fasle、null、undefined、0、NaN、‘’)则返回此表达式,否则返回最后一个表达式(注意,这边所说的表达式不一定为boolean类型)
2. || 的工作方式: 从第一个开始,遇到值为true的表达式(与上面&&相反的其他情况)的返回此表达式,否则返回最后一个表达式
3. ! 的工作方式: 对表达式的值取非(注意不是对表达式)。

回到上面的例子,我们可以知道,对于var ob2 = (ob1&&true);,首先看ob1表达式强制转换为boolean类型后的值,这边ob1为Boolean引用类型,从前文可知强制转换后值为true。逻辑运算(ob1&&true)会继续看下一个值true。这时,逻辑运算&&发现这已经是最后一个值,所以返回了最后的这个表达式true。最终我们的ob2 = true。
对于var ob3 = (true&&ob1);,首先第一个表达式是true,接着看第二个表达式ob1,由于这已经是最后一个表达式了,所以返回ob1。最终ob3 = ob1 = new Boolean(false);即ob3是一个Boolean引用类型。
最后,在alert语句中,使用"ob3 = " + ob3时,默认会调用ob3的toString()方法,而Boolean类型的toString方法即是输出它自己的内部值。这边ob3的内部值为false。了解到这样的特性后,对于ob4和ob5的结果也就不难理解了。

上一篇:Null与Undefined -- Practical JavaScript(一)
分享到:
评论

相关推荐

    JavaScript类型系统之布尔Boolean类型详解_.docx

    布尔类型不是JavaScript中的引用类型,而是原始类型。然而,存在与之相关的包装对象——`Boolean`对象,这可能会导致一些混淆。当使用`new Boolean()`创建一个布尔对象时,实际上是创建了一个包含布尔值的Object,而...

    JAVA原始类型和引用类型有哪些区别?[定义].pdf

    Java编程语言中有两种基本的数据类型:原始类型(Primitive Types)和引用类型(Reference Types),它们在行为、存储和使用上存在显著的区别。 1. **原始类型(Primitive Types)**: - Java的原始类型包括布尔型...

    javascript之Boolean类型对象

    在JavaScript中,`Boolean`类型是一种基本的数据类型,与Java中的`Boolean`封装类相似,它主要用于表示逻辑上的真或假。通常,我们使用`true`和`false`这两个关键字来表示`Boolean`类型的值。然而,JavaScript还允许...

    JavaScript高级教程-引用类型.pptx

    总结来说,JavaScript的基本数据类型和引用类型在处理和存储上有显著区别,理解这两种类型对于编写高效且无错误的JavaScript代码至关重要。基本类型是不可变的,按值访问,而引用类型则是可变的,按引用访问,这决定...

    原始类型 包装类 原始类型所占的字节数

    在 Java 中,还有许多其他的知识点与原始类型和包装类相关。例如,Integer 类提供了许多有用的方法,可以对整数进行操作,例如将整数转换为字符串、比较两个整数的大小等。Byte 类、Short 类、Long 类、Float 类、...

    跟我学习javascript的基本类型和引用类型

    JavaScript还提供了三个特殊的引用类型:Boolean、Number和String。它们是基本类型的包装器,允许我们将基本类型值当作对象来操作。但这种包装器创建的对象与直接使用new操作符创建的对象不同。基本包装器对象只存在...

    javascript数据类型 -JavaScript优势简介及数据类型

    二、JavaScript的数据类型 JavaScript提供了多种数据类型,包括基本和复合类型: 1. **基本数据类型**: - **数字(Numbers)**:整数和浮点数,如123,120.50。 - **字符串(Strings)**:文本字符序列,如"This...

    shiyou00#knowledge#JavaScript数据类型Boolean布尔类型1

    前言布尔值Boolean类型可能是三种包装对象Number、String和Boolean中最简单的一种。Number和String对象拥有大量的实例属性和方法,

    引用类型传值方法

    引用类型包括类(classes)、接口(interfaces)、数组以及委托(delegates),它们在内存中的存储方式与值类型截然不同。对于引用类型,变量存储的是一个指向对象内存地址的引用,而非对象本身。因此,当我们将一个...

    angluo-javascript-266805.zip

    JavaScript有七种原始数据类型(null、undefined、boolean、number、bigint、string、symbol)和一种复杂数据类型(object)。 2. **控制结构**:条件语句(如if...else)用于根据特定条件执行不同代码块,而循环...

    JavaScript基础知识例子

    在JavaScript中,数据类型分为基本类型和引用类型。基本类型包括字符串(String)、数字(Number)、布尔值(Boolean)、空值(Null)、未定义(Undefined)和Symbol(ES6新增)。例如,`016-javascript-数据类型....

    TypeScript 与 JavaScript - 详细比较.docx

    TypeScript 扩展了 JavaScript 的原始类型(number、string、boolean、null 和 undefined),并引入了更丰富的类型,如文字类型(字符串、数组和对象)、any(表示任意类型)、unknown(表示未知类型)、void(表示...

    Javascript-the-Good-Parts-notes, 关于seminal的优秀部分,注释.zip

    - JavaScript有两类数据类型:原始类型(Primitives)和引用类型(Objects)。原始类型包括:Undefined、Null、Boolean、Number、BigInt、String和Symbol。 - JavaScript是动态类型语言,变量可以随时更改其数据...

    14 - JavaScript 引用和值拷贝.rar

    1. 值类型与引用类型 在 JavaScript 中,数据类型分为两大类:基本数据类型(值类型)和引用数据类型(引用类型)。值类型包括 null、undefined、boolean、number、bigint、string 和 symbol,它们是按值访问的。这...

    Boolean RT.zip

    BooleanRT, 实现2个物体间的布尔运算 The extension provides the following functions: 1- Real-time or per-click Boolean execution. 2- Material, UV and texture preservation. 3- Saving to prefab. 4- ...

    悟透JavaScript--《JavaScript真经》

    JavaScript的数据类型分为简单数据类型和复杂数据类型。简单数据类型包括undefined、null、boolean、number和string,它们是不可变的。undefined表示未定义或未知的值,null则表示有意识的空值。boolean表示逻辑值,...

    javascript-review-源码.rar

    - 数据类型:原始类型(Number, String, Boolean, Null, Undefined, Symbol, BigInt)和引用类型(Object) - 表达式与运算符:算术、比较、逻辑、赋值等 - 控制流:条件语句(if...else)、循环(for, while, do...

    引用类型与值类型的运算

    在探讨“引用类型与值类型的运算”这一主题时,我们需要深入了解JavaScript中两种基本的数据类型——值类型和引用类型,并理解它们之间如何进行运算。本文将根据提供的内容进行深入解析。 ### 引用类型与值类型的...

    JavaScript基本类型值-Undefined、Null、Boolean

    在JavaScript中,基本类型值的使用和处理非常重要,了解Undefined、Null和Boolean这三种基本类型值,能够帮助开发者更好地编写逻辑判断和数据验证的代码,为编写高质量的JavaScript程序打下坚实的基础。

Global site tag (gtag.js) - Google Analytics