首先需要知道的是,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()或两次取非来获取布尔值.
以下值做==运算
true | 0 | ‘’ | undefined | null | Infinity | NaN | {} | [] | |
true | √ | × | × | × | × | × | × | × | × |
0 | √ | √ | × | × | × | × | × | √ | |
‘’ | √ | × | × | × | × | × | √ | ||
undefined | √ | √ | × | × | × | × | |||
null | √ | × | × | × | × | ||||
Infinity | √ | × | × | × | |||||
NaN | × | × | × | ||||||
{} | × | × | |||||||
[] | × |