`

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 + " 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)中

varx=false;
varxObject=newBoolean(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

varxObject=newBoolean(false);
varresXObject=newBoolean(xObject);
alert(
"TheresXObjectvalueis"+resXObject);

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

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



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

varob1=newBoolean(false);
varob2=(ob1&&true);
varob3=(true&&ob1);
varob4=Boolean(ob1&&true);
varob5=Boolean(true&&ob1);
alert(
"ob2="+ob2+"ob3="+ob3+"ob4="+ob4+"ob5="+ob5);

结果:

ob2=trueob3=falseob4=trueob5=true

js.JPG


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

希望大家能告诉我!


问题已经解决:

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

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

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

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

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

谢谢 jeffjie

继续学习^+^
分享到:
评论

相关推荐

    深入了解JavaScript中的Symbol的使用方法

    JavaScript 在 1997 年被标准化时,就有 6 种数据类型,直到 ES6 出现之前,程序中的变量一定是以下 6 种数据类型之一:  Undefined  Null  Boolean  Number  String  Object 每种数据类型都是一系列值的组合...

    微软JavaScript手册

    isPrototypeOf 方法 返回一个 Boolean 值,表明对象是否存在与另一对象的原型链中。 italics 方法 将 HTML的 <I> 标识添加到 String 对象中的文本两端。 item 方法 返回集合中的当前项。 join 方法 返回一个由...

    javascript文档

    javascript的官方文档 这些方便实用的信息将帮助您了解 JScript 的各个部分。 在“字母顺序的关键字列表”中,可以找到按字母顺序列出的所有 JScript 语言的主题。如果只需要查看某个主题(例如对象),则有对该主题...

    rust-geo-booleanop:Martinez-Rueda多边形裁剪算法的Rust实现

    地理形状的布尔运算 这是在锈中的,可以平滑地集成到已经... 如果您不知道该怎么做(您了解生锈但不了解JavaScript?...我的意思是……是认真的吗?),您可以看一下以下示例: : 也就是说,只需创建package.json ,

    javascript中undefined的本质解析

    下面解释javascript中属性的本质,因为undefined是一个属性,了解undefine的本质要用到属性的本质。 三、属性本质 对JavaScript来说,属性并非只是简单的名称和值,JavaScript用一组特征(attribute)来描述属性...

    Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍

    我们知道 Boolean(value) 是把值转换成Boolean类型,Nnumber(value) 是把值转换成数字(整型或浮点数),而 String(value) 是把值转换成字符串,需要的朋友可以了解下

    javascript中的 object 和 function小结

    在学习过传统的面向对象语言后,如 java c++,转学 javascript 却有点不适应,特别是 javascript 中所谓的 object(对象) function(函数),有时候会被搞晕。于是乎简单整理了下面的一些概念性的东西,方便学习和...

    12个提高JavaScript技能的概念(小结)

    如果是你是高级或者初级 JavaScript 开发人员,了解它的基本概念非常重要。本文介绍 JavaScript 至关重要的12个概念,但绝对不是说 JavaScript 开发人员只需要知道这些就可以了。 1.变量赋值 (值 vs 引用) 理解 ...

    javascript入门笔记

    1、Javascript 概述(了解) Javascript,简称为 JS,是一款能够运行在 JS解释器/引擎 中的脚本语言 JS解释器/引擎 是JS的运行环境: 1、独立安装的JS解释器 - NodeJS 2、嵌入在浏览器中的JS解释器 JS的发展史...

    javascript::nail_polish:为了在BigchainDB,IPDB和ascribe的存储库中获得一致JavaScript

    BigchainDB JavaScript样式指南在与BigchainDB相关的仓库中获得一致JavaScript。介绍在归因上,我们编写了许多JavaScript和价值质量代码。 由于我们所有人都喜欢,因此我们认为我们可以对其进行扩充并根据需要进行...

    浅析JavaScript基本类型与引用类型

    这篇文章会讲几个方面,这些方面可能会需要你对 JavaScript 已经有了一些简单的了解,特别是 JavaScript 的类型。如果还不一解,可以随手拿起一本关于 JavaScript 的书翻翻,再来看本文。 一、基本类型与引用类型 1....

    javascript-challenges

    您应该对JavaScript数据类型( string , boolean , number , array , object ),控制流( if , else ),创建函数,循环( for , while )和基本jQuery有基本的了解。 您还应该知道如何创建HTML页面并将CSS...

    javascript简单实现深浅拷贝过程详解

    首先我们来了解一下javascript的数据类型,在ES5版本的js中我们的javascript一共有6种数据类型,分别是: Number(数值型)、String(字符串)、Boolean(布尔型)、Object(对象,object和array都属于Object类型)...

    浅谈javascript中的instanceof和typeof

    以前偶尔的用到过,特别是typeof用到的相对更多一些,今日研究ext源码,很多地方都用到了instanceof,突然觉得他们两个有些相似但也应该有他们区别,网上看了一些文章,对它们之间的关系有了一定的了解。 instanceof...

    napster.js:Napster Javascript SDK

    在相关的jQuery库之后,在您的应用程序中包含napster.min.js源代码。 加载源后,必须使用应用程序密钥初始化该库。 Napster . init ( { consumerKey : 'api_key' , // application key of your application is...

    match-rules:一个微小的1kB零依赖性JavaScript实用程序,可让您以声明性方式编写条件业务逻辑(类似)

    比赛规则一个很小的(1kB GZipped)零依赖性JavaScript实用程序,可让您以声明性方式(如类似方法)编写条件业务逻辑。 它可以与功能标志,复杂条件,条件渲染一起使用,剩下的就是您的想象力。 我写了,请阅读以...

    详解Javascript数据类型的转换规则

    5种基本数据类型:Null/Undefined/String/Boolean/Number 1种复杂数据类型:Object 二、数据类型检测 传送门《JS中检测数据类型的几种方式及优缺点小结》 1、typeof 2、instanceof/constructor 3、Object.prototype....

    ip-design-lib

    查看故事书以更详细地了解所有组件。 定义 自动完成选择D interface AutoCompleteSelection { title: string ; className: any ; color ?: any ; disabled ?: boolean ; node ?: HTMLElement ; payload ?: ...

    json原理分析及实例介绍

    这次在项目中前后台的数据交互中用到了json,经过这段时间的使用,大概了解了一下,简单总结一下json。 JSON:JavaScript 对象表示法(JavaScript Object Notation)。 JSON 是存储和交换文本信息的语法。类似 XML。...

    17道题让你彻底理解JS中的类型转换

    本文将通过 17 道题目来深入的了解 JS 中的类型转换,通过阅读本文之后,你将能自信的回答出下面题目的答案,并且能够理解背后的原理。在文章的最后,我讲写出答案并解释。在看答案之前,你可以把答案写下来,最后再...

Global site tag (gtag.js) - Google Analytics