首先需要知道的是,js中有6个值为false,分别是: 0, '', null, undefined, NaN 和 false, 其他(包括{}, [], Infinity)为true.

可以使用Boolean()函数或是两次取非就能获得对象的布尔值,例如Boolean(undefined)和!!undefined同样能取得布尔值false,

对于0, '', null, undefined, NaN,{}, [], Infinity求布尔值,分别是false false false false false true true true.

因此我们知道的一点是:对象的布尔值是true,即使是对象{}。

另外, 不同的对象比较返回false,只有引用相同的对象才返回true,如:

var a = b = {};

console.log(a==b) ; //true

console.log({}=={}); //false

console.log([]==[]); //false,因为[]是object

还需要注意的是:

 console.log(new Boolean(false)==false);   //true
console.log(new Boolean(true)==true); //true

另外,js中有Boolean对象,例如:通过new Boolean(false)能获得一个初始值为false的布尔对象,但是不能用new Boolean()来获取

对象的布尔值,因为这样我们就new了一个布尔对象,既然是对象,我们获得的就永远是true,所以不幸的是,

if(new Boolean(false)){//这里面的代码一定会执行,即使布尔对象的值是false}. 再次强调,用Boolean()或两次取非来获取布尔值.

如果0, '', null, undefined, NaN,{}, [], Infinity,false, true互相比较(执行"=="运算)会怎么样呢?

   function k(r){
console.log(r,": ", r==false,r==true,r==0,r=='',r==undefined,r==null,r==NaN,r==Infinity,r=={},r==[]);
} k(true);
k(false);
k(0);
k('');
k(undefined);
k(Infinity);
k(NaN);
k({});
k([]);

由于将null作为参数传给函数时,相当于传入了undefined,所以对于null的检验,需要在修改k函数,即在函数内部让r=null;

从结果(结果就不列出来了)可以得到一些结论:

1、0, '', [], false 互相比较(包括和自身比较)都返回true, 与其他值比较返回false;

2、undefined 和 null 互相比较返回true, 和自身比较也返回true, 其他情况返回false;

3、Infinity只和自身比较返回true;

4、NaN,{}和任意值比较都是返回false;

5、除了true==true以外, true和其他值哪怕非0的数字,非空字符串,非空对象,非空数组都是返回false。

-------------------------------转载注明出处:http://www.cnblogs.com/suspiderweb/

总结js中数据类型的bool值及其比较的更多相关文章

  1. js和php对bool值的判断区别

    一.将一种数据类型转换为bool值时,PHP和JS的转换规则不同 PHP中 当转换为 boolean 时,以下值被认为是 FALSE : 布尔值 FALSE 本身 整型值 0(零) 浮点型值 0.0( ...

  2. C语言中数据类型的取值范围

    C语言中数据类型的取值范围如下:char -128 ~ +127 (1 Byte)short -32767 ~ + 32768 (2 Bytes)unsigned short 0 ~ 65536 (2 ...

  3. JS中怎么调用<%%>的值

    JS中怎么调用<%%>的值 示例代码一: <% String usercode = request.getParameter("usercode");//用req ...

  4. js中可转bool为false的值

    number :0为false,其他都为true. string:""为false,其他字符串都为真,PS: " "空格为true,"false&qu ...

  5. 字符串0.在php和js中转换为布尔类型 值是false还是true

    在php 中 $a = '0'; $b = (bool)$a; var_dump($a);//输出false 在js中官方说明: Note:If the value parameter is omit ...

  6. JS中数据类型及原生对象简介

    js是一种专门设计用来给网页增加交互性的编程语言,它的技术体系包含了一下几个方面: 1.JavaScript核心语言定义:包括数据类型,变量,常量,运算符,语句等. 2.原生对象和内置对象 3.浏览器 ...

  7. js中function参数默认值

    --在dreamweaver做网站时,函数定义是在一个*.js文件中,其中定义了一个func,有四个参数,function func(string1,url,flag,icon),然后在另一个asp中 ...

  8. mysql中数据类型的取值范围

    mysql整型bigint.int.mediumint.smallint 和 tinyint的语法介绍,如下: 1.bigint 从 -2^63 (-9223372036854775808) 到 2^ ...

  9. js中取session的值

    在js中貌似不能取session的值,我在后台设置的session一直拿不到,于是用间接的方式拿到session的值. 首先在jsp中嵌入java代码,用java设置一个变量来取session值,再在 ...

随机推荐

  1. HTML 5 音频

    HTML 5 音频 ================================================================================= 音频是视频的重要 ...

  2. 使用AFNetWorking 实现以Basic Authentication方式获取access-token

    由于服务器端对于调用API获取数据接口进行了限制,需要在调用API之前获取一个access-token,所以需要在iOS里实现获取这个access-token的功能. 服务器端是在ASP.NET中基于 ...

  3. Git 命令清单

    这份命令清单并不完善,后期会根据使用情况再进行更改. 操作分支项目 1 下载仓库的一个分支(baooab-patch-1)的代码 git clone -b baooab-patch-1 https:/ ...

  4. nginx expires

    配置expiresexpires起到控制页面缓存的作用,合理的配置expires可以减少很多服务器的请求要配置expires,可以在http段中或者server段中或者location段中加入   1 ...

  5. django queryset values&values_list

    values返回是字典列表; values_list返回的是元组列表, values_list加上 flat=True 1 1 之后返回值列表

  6. 机电传动控制 PLC梯形图编程练习

    交通灯控制 在如下图的场景中,打开SW1开关后,交通灯控制器开始工作,关闭SW1则控制器停止工作. 梯形图: 仿真结果: 可以满足所需要求. 输送带控制 输送带场景如下图: 梯形图: 仿真结果: 满足 ...

  7. SVN使用手册

    安装Tortoise SVN Icon TortoiseSVN 1.7版本及之后与之前的版本有很大的变化,主要区别如下: 1.7以前的版本会在每个目录中生成一个.svn的隐藏目录.1.7及以后的版本, ...

  8. HTML5 Canvas一些常用的操作

    粗略的Canvas API 1. context var context = canvas.getContext('2d'); 2.Canvas state context.save();//将当前状 ...

  9. MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box)

    本节继续讲解常用控件--按钮控件的使用. 按钮控件简介 按钮控件包括命令按钮(Button).单选按钮(Radio Button)和复选框(Check Box)等.命令按钮就是我们前面多次提到的侠义的 ...

  10. 在Eclipse中,如何把一个java项目变成web项目

    经常在eclipse中导入web项目时,出现转不了项目类型的问题,导入后就是一个java项目.解决步骤:1.进入项目目录,可看到.project文件,打开.2.找到<natures>... ...