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