簡單說 !![]==true 與 []==true 引起的思考

說明

直接說出問題segmentfault

!![] == true //結果是true 
[] == true   //結果是false 
![] == []    //結果是true

爲何會出現這種狀況spa

解釋

首先說一下,若是你看到這些代碼,能想到 相等運算符(== ),兩個操做數類型不一樣時,進行的轉換,那麼你已經接近答案了。 .net

不要浪費時間,咱們須要先知道在JavaScript中的一些比較特別的類型轉換,最好能記住哦!!!code

[] 轉爲字符串是 ""       // String([]) 返回""
[] 轉爲數字是 0            // Number([]) 返回0
[] 轉爲布爾值是 true        // Boolean([]) 返回true
true 轉爲數字是 1       // Number(true) 返回1
false 轉爲數字是 0      // Number(false) 返回0

若是想知道爲何,請點這裏
簡單說 JavaScript中的tostring( ) 與 valueOf( )方法 對象

咱們一句一句的看 blog

!![] == true //結果是true
! (邏輯非),會將操做數的布爾值求反,而!! 就是類型轉換,將對應的類型轉換爲boolean型
因此咱們看一看,[ ]一次求反 (![]) 返回的就是false,再求反(!![]) 返回的就是true。
最後的比較就變成 true == true 天然結果是 true ip

[]==true //結果是false
這裏咱們重點說說,相等運算符(==) 在遇到兩個操做數類型不一樣的時候,要遵照的規則和類型轉換
一、若是-個值是null, 另外一個是undefined,則它們相等
null == undefined //返回true
二、若是一個值是數字,另外一個是字符串,先將字符串轉換爲數字,而後使用轉換後的值進行比較。rem

1 == "1" //1==1  //結果是true
2 == "1" //2==1  //結果是false

三、若是其中一個值是true,則將其轉換爲1再進行比較。若是其中一個值是false,則將其轉換爲0再進行比較。字符串

"1" == true     //1==1 結果是true
0 == false      //0==0 結果是true

四、若是一個值是對象,另外一個值是數字或字符串,則將對象轉換爲原始值,而後再進行比較。對象經過toString()方法或者valueOf()方法轉換爲原始值,JavaScript語言核心的內置類先嚐試使用valueOf(),再嘗試使用toString(),除了日期類,日期類只能使用toString()轉換,那些不是JavaScript語言核心中的對象則經過各自的實現中定義的方法轉換爲原始值。get

原始值:不可變動的值,包括undefined、null、布爾值、數字、和字符串。

全部的對象都有toString() valueOf()這兩個方法。
toString()方法的做用是,返回一個反映這個對象的字符串。
valueOf()方法的做用是,一個對象那個若是存在任意原始值,它就默認將對象轉換爲表示它的原始值。

五、其餘不一樣類型之間的比較均不相等。

好的,咱們知道這些規則後,再來看行代碼
[]==true //結果是false
true 會轉爲1
[ ] 會轉爲 0
最後是比較的是 0 == 1,因此結果是false

理解了上面的內容的話,那麼
![] == [] //結果是true
這行代碼,也就好理解了
![ ] ,也就是 [] 先轉爲 布爾值(true),而後求反,就是false,false 轉爲數字就是0
[ ]轉爲數字就是0
最後就是 0 == 0 ,因此結果就是true

總結

強調一點,[ ] 轉數字 是0,轉布爾值,是true,可是這不是說, 0 轉爲布爾值是true,而是false,是false,false。

這篇文章主要是說一些關於隱式轉換的事。
根據上面的三行代碼,還能寫出一些其餘的來,看看下面這些有趣的代碼吧。

[] == 0      //返回結果是 true
![] == 0     //返回結果是 true
[] == ''     //返回結果是 true
!![] == ''   //返回結果是 false
'' == true   //返回結果是 false

文章不長主要是想說清楚,最開始提到的問題。
最後推薦兩篇相關的文章,但願對你們有所幫助。
簡單說 JavaScript中的tostring( ) 與 valueOf( )方法
簡單說 經過JS的隱式轉換,關鍵時刻救你一命

相關文章
相關標籤/搜索