古來聖賢皆寂寞 惟有【努】者留其名 ---【努】原文:飲
先總結一個小知識點:0、null、NaN、undefined、"" 轉成布爾值為false 其他則一律返回true
1、首先明白一點:初始化后的數組,即使是空數組,也是一個object 當然非空數組肯定是一個object
console.log(typeof [])//object console.log(typeof(new Array()))//object2、既然是對象,用於判斷條件就會轉成trueif([]){ console.log(1)//1 可以打印出來 }3、但是將[]與布爾值比較卻是false[]==false //true Boolean([])//true4、但是將空數組轉成Boolean卻是true,既然是true 為什么[ ]==false接着往下看:Number([])//0 0==false總結:這說明一個問題,當空數組與布爾值進行比較時,是將==兩邊先轉成Number在進行比較,這樣可以解釋的通了所以,當空數組作為判斷條件時,相當於true。當空數組與布爾值直接比較時,相當於false。6、但是還有一個理解不了的問題,看下面[1]==false//false ,按照上邊的結論 [1] 轉成Number 結果是1轉成布爾值是true 沒錯,但是下面有個問題 new Array(2)==false//false 也沒問題 new Array(1)==false//true 可是new Array(1)是卻是true,, //望大神解答?7、接着還有一小個問題[]==[] //false []==![]//true明明是兩空數組為什么不相等呢?原因:是數組是有new Array() 創建出來的,兩個數組即使值相等,它也是new Array()創建出來的兩個實例對象,自然不會相等8、直接拿數值與布爾值比較console.log(0==true)//false console.log(1==true)//true
console.log(1==false)//false console.log(2==true)//false console.log(2==false)//false console.log("------------------") console.log(Boolean(0))//false console.log(Boolean(2))//true console.log(Boolean(1))//true
結論:①直接拿數值與布爾值進行比較,0是false,1是true,其他的數字直接與布爾值比較,無論比較2==false或2==true 結果都是false
②將數值轉成布爾值只有0是false,其他都是true