js雙等號探索(三): [] == false爲True,而!![] == false爲False ?

[] == false; //爲True
!![] == false; //爲False

一、[] == false爲True

第一步 轉成[] == 0

根據 MDN Web 文檔-比較操作符:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Comparison_Operators

0.png

如果其中一個操作數爲布爾類型,那麼布爾操作數如果爲true,那麼會轉換爲1,如果爲false,會轉換爲整數0,即0。
所以![]false0.
[] == 0

第二步 轉成"" == 0

根據 MDN Web 文檔-比較操作符:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Comparison_Operators

image.png

如果一個對象與數字或字符串相比較,JavaScript會嘗試返回對象的默認值。操作符會嘗試通過方法valueOf和toString將對象轉換爲其原始值(一個字符串或數字類型的值)。
所以[].valueOf().toString()""
"" == 0

第三步 轉成0 == 0

根據 MDN Web 文檔-比較操作符:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Comparison_Operators

image.png

當比較數字和字符串時,字符串會轉換成數字值。 JavaScript 嘗試將數字字面量轉換爲數字類型的值。
Number("")0
0 == 0

最後0==0True,所以[] == falseTure

二、!![] == false爲False

第一步 先運行!![]

根據 MDN Web 文檔-運算符優先級:[https://developer.mozilla.org...
](https://developer.mozilla.org...
感嘆號.png

等號.png

!的優先級爲16 ,==的優先級爲10!的優先級更高,所以先運行!![]

!![]

第二步 先運行!false

根據 《Javascript高級程序設計》這本書第44頁中邏輯非的說明:
!.jpeg

如果操作數是一個對象,返回false

所以運行!false,爲True

!false //爲True

最後true == falseFalse,所以!![] == falseFalse

[] == falseTrue!![] == falseFalse

其他鏈接

Happy coding ..

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章