总结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({}=={}); //falsejs的基本数据类型
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。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论