首先需要知道的是,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. NOI 动态规划题集

    noi 1996 登山 noi 8780 拦截导弹 noi 4977 怪盗基德的滑翔翼 noi 6045 开餐馆 noi 2718 移动路线 noi 2728 摘花生 noi 2985 数字组合 no ...

  2. 深入理解javascript原型和闭包(完结)

    原文链接:http://www.cnblogs.com/wangfupeng1988/p/3977924.html 说明: 该教程绕开了javascript的一些基本的语法知识,直接讲解javascr ...

  3. JS动态添加option和删除option

    1.动态创建select function createSelect(){ var mySelect = document.createElement("select");     ...

  4. CentOS 7 / RHEL 7 – Open ports

    Travis -  June 13, 2015 - Leave a comment One of the most common things I do on Linux machines is op ...

  5. 深入了解try catch

    @Test public void testWeiXin(){ System.out.println(task()); } private boolean task(){ try { int i = ...

  6. set集合(set是一个无序且不重复的元素集合)

    功能: 一.可以去掉列表,元组中的重复项 二.可以求交集,合集,差集等 def add(self, *args, **kwargs): """ 添加 "&quo ...

  7. OpenLayers控制瓦片的绽放级别

    先说说这个功能可能使用到的地方,当我们下载的网上瓦片或者矢量数据的第一级或开始几级效果不是很好时,我们就就想让用户看到这些级别的瓦片.实现这个功能比较简单,主要就是修改Openlayers.map的i ...

  8. [Linux]cmd to use

    0x01 Linux Perfermance Analysis in 60s 1> uptime ---load averages 2> dmesg -r | tail ---kernel ...

  9. a标签的作用

    a标签的hover,active,target,visited等伪类在所有浏览器中是兼容的,而其他元素的这些伪类并不全兼容:   a标签本身是跳转页面的,把跳转的地址写在href这个属性中, (1)不 ...

  10. 程序设计入门——C语言 第6周编程练习 2 完数(5分)

    2 完数(5分) 题目内容: 一个正整数的因子是所有可以整除它的正整数.而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数.例如6=1+2+3(6的因子是1,2,3). 现在,你要写一个程序, ...