總結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/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM