[] == false; //爲True
!![] == false; //爲False
一、[] == false
爲True
第一步 轉成[] == 0
根據 MDN Web 文檔-比較操作符:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Comparison_Operators
如果其中一個操作數爲布爾類型,那麼布爾操作數如果爲true,那麼會轉換爲1,如果爲false,會轉換爲整數0,即0。
所以![]
爲false爲0
.
[] == 0
第二步 轉成"" == 0
根據 MDN Web 文檔-比較操作符:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Comparison_Operators
如果一個對象與數字或字符串相比較,JavaScript會嘗試返回對象的默認值。操作符會嘗試通過方法valueOf和toString將對象轉換爲其原始值(一個字符串或數字類型的值)。
所以[].valueOf().toString()
爲""
"" == 0
第三步 轉成0 == 0
根據 MDN Web 文檔-比較操作符:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Comparison_Operators
當比較數字和字符串時,字符串會轉換成數字值。 JavaScript 嘗試將數字字面量轉換爲數字類型的值。Number("")
爲0
。
0 == 0
最後0==0
位True
,所以[] == false
爲Ture
二、!![] == false
爲False
第一步 先運行!![]
根據 MDN Web 文檔-運算符優先級:[https://developer.mozilla.org...
](https://developer.mozilla.org...
!
的優先級爲16 ,==
的優先級爲10,!
的優先級更高,所以先運行!![]
!![]
第二步 先運行!false
根據 《Javascript高級程序設計》這本書第44頁中邏輯非
的說明:
如果操作數是一個對象,返回false
所以運行!false
,爲True
!false //爲True
最後true == false
爲False
,所以!![] == false
爲False
則[] == false
爲True
而!![] == false
爲False
。
其他鏈接
Happy coding ..