js雙等號探索(一): [] == ![]為Ture ?
[] == ![] //為True
第一步 轉成 [] == false
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

感嘆號.png

等號.png
!
的優先順序為 16 , =
的優先順序為 10 , !
的優先順序更高,所以先執行 ![]
為 false
[] == false
第二步 轉成 [] == 0
根據 MDN Web 文件-比較操作符 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Comparison_Operators

0.png
如果其中一個運算元為布林型別,那麼布林運算元如果為true,那麼會轉換為1,如果為false,會轉換為整數0,即0。
所以 ![]
為 false 為 0
.
[] == 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==0
位 True
,所以 [] == ![]
為 Ture
參考資料
Happy coding .. :)