zoukankan      html  css  js  c++  java
  • 总结js中数据类型的bool值及其比较

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

  • 相关阅读:
    禁用Clusterware在系统启动后自己主动启动
    码农的产品思维培养第4节----听用户饿但不要照着做《人人都是产品经理》
    android RecycleView复杂多条目的布局
    【shell脚本练习】网卡信息和简单日志分析
    Java太阳系小游戏分析和源代码
    《你是我的眼》,歌曲非常好听
    hdu 1856 More is better(并查集)
    Python 中的isinstance函数
    Python中的 isdigit()方法
    Python中的split()函数的使用方法
  • 原文地址:https://www.cnblogs.com/suspiderweb/p/4908572.html
Copyright © 2011-2022 走看看