首先需要知道的是,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);   //trueconsole.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/

转载于:https://www.cnblogs.com/suspiderweb/p/4908572.html

总结js中数据类型的bool值及其比较相关推荐

  1. SpringMVC中通过@ResponseBody返回对象,Js中调用@ResponseBody返回值,统计剩余评论字数的js,@RequestParam默认值,@PathVariable的用法

    1.SpringMVC中通过@ResponseBody返回对象,作为JQuery中的ajax返回值 package com.kuman.cartoon.controller; import java. ...

  2. js中递归调用返回值为undefined问题

    js中递归调用返回值为undefined问题 问题重现 下面这个简单的递归函数 理论上弹出的是11 但是............. 问题解决 在函数调用处加return

  3. js中function参数默认值

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

  4. JS中数据类型、内置对象、包装类型对象、typeof关系

    平时在复习JS基础知识时,经常会遇到JS数据类型.基础数据类型.内置对象.包装类型对象,检测数据类型时,用到的typeof值,感觉都差不多,但是又有差异.今天特地整理下,方便理解. JS数据类型 基础 ...

  5. Java中数据类型的取值范围

    整数数据类型的取值范围 我们都知道计算机的底层是二进制,也知道不同的整数类型存储值的范围不同,可这些数值在计算机底层是怎样存储的呢?数值范围又是怎么计算出来的呢? 下面以java来进行举例: byte ...

  6. mysql+默认值+default_十六、MySQL 中数据类型的默认值 - default 约束-搜云库

    MySQL 中,所有的数据类型,都可以显式或隐式的拥有默认值. 我们可以使用 DEFAULT 约束显式的为列指定一个默认值.比如 CREATE TABLE t1 ( i INT DEFAULT -1, ...

  7. Js中数据类型的转换和运算符

    数据类型转换 var str="abc"; str=Number(str); // 如果字符串是由数字构成,强转后变为数值,否则变成NaN NaN是非数值类型 parseInt转换 ...

  8. html中设置data-*属性值 并在js中进行获取属性值

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  9. JS:js中的复制对象值问题——Object.assign()

    在复制对象的值的时候,往往不能直接"=",这样会造成引用赋值,应该利用一些函数进行对象的复制值.如下: $scope.updateDeliveryOrder = function( ...

  10. 判断js中数据类型 的最短代码

    判断字符串类型的:function isString(obj) {return obj "" === obj;}判断bool类型的:function isBool(obj){ret ...

最新文章

  1. 使用Spring进行统一日志管理 + 统一异常管理
  2. make的使用和Makefile规则和编程及其基本命令(简单)
  3. Fragment间的通信
  4. NEO智能合约开发(一)不可能完成的任务
  5. 不止代码:循环比赛(分治)
  6. 网易云音乐上市首日收跌2.49% 盈利困境仍待解
  7. android的wake_lock介绍
  8. GO语言的进阶之路-流程控制
  9. 贝叶斯网络分析软件Netica
  10. 用C#制作RPG游戏
  11. pandas 中delete、drop函数的用法
  12. 【无标题】打印水仙花(pyth)
  13. 不良事件总结怎么写_一份年度护理不良事件报告是怎样写成的
  14. 守望先锋服务器修改,守望先锋开发者访谈:关于自定义的服务器
  15. 流媒体-RTMP协议-rtmpdump-flv封装解析(一)
  16. TI-RTOS---TI-RTOS简介
  17. Python3D绘图后用自带展示器查看(可旋转)
  18. CKA2020考试血泪史
  19. 优秀UI设计作品需要具备的六要素,不容忽视!
  20. Interview之CV:人工智能领域求职岗位—计算机视觉算法工程师的职位简介、薪资介绍、知识结构之详细攻略

热门文章

  1. Atitit.php opcode虚拟机指令集 分类以及详细解释
  2. paip.c语言gtk开发环境CodeBlocks /QT建立最佳实践
  3. Flex4 启动失败: 正在等待 Adobe Flash Player 连接调试器
  4. Linux环境变量配置【转】
  5. 经纬创投:我们研究了200多家公司的融资条款,告诉你如何防止被“套路”
  6. (转)金融“核武器”即将引爆整个行业
  7. 十种程序语言帮你读懂大数据的“秘密”,Julia位列其中!(转)
  8. 云原生的What、Why、How | 凌云时刻
  9. 加速新冠疫苗研发,阿里云免费开放一切AI算力!
  10. 迎建国七十周年,Linux厂商巡礼之一铭软件